{ "version": 3, "sources": ["../../../node_modules/@rails/actioncable/src/adapters.js", "../../../node_modules/@rails/actioncable/src/logger.js", "../../../node_modules/@rails/actioncable/src/connection_monitor.js", "../../../node_modules/@rails/actioncable/src/internal.js", "../../../node_modules/@rails/actioncable/src/connection.js", "../../../node_modules/@rails/actioncable/src/subscription.js", "../../../node_modules/@rails/actioncable/src/subscription_guarantor.js", "../../../node_modules/@rails/actioncable/src/subscriptions.js", "../../../node_modules/@rails/actioncable/src/consumer.js", "../../../node_modules/@rails/actioncable/src/index.js", "../../../node_modules/moment/moment.js", "../../../node_modules/moment-timezone/moment-timezone.js", "../../../node_modules/moment-timezone/index.js", "../../../node_modules/caldate/lib/utils.cjs", "../../../node_modules/caldate/lib/CalDate.cjs", "../../../node_modules/caldate/lib/index.cjs", "../../../node_modules/deepmerge/dist/cjs.js", "../../../node_modules/date-holidays-parser/lib/utils.cjs", "../../../node_modules/date-holidays-parser/lib/internal/utils.cjs", "../../../node_modules/date-holidays-parser/lib/Data.cjs", "../../../node_modules/date-holidays-parser/lib/Parser.cjs", "../../../node_modules/date-holidays-parser/lib/Rule.cjs", "../../../node_modules/date-holidays-parser/lib/CalEvent.cjs", "../../../node_modules/date-holidays-parser/lib/PostRule.cjs", "../../../node_modules/date-easter/lib/index.cjs", "../../../node_modules/date-holidays-parser/lib/Easter.cjs", "../../../node_modules/astronomia/lib/base.cjs", "../../../node_modules/astronomia/lib/interpolation.cjs", "../../../node_modules/astronomia/lib/angle.cjs", "../../../node_modules/astronomia/lib/sexagesimal.cjs", "../../../node_modules/astronomia/lib/globe.cjs", "../../../node_modules/astronomia/lib/coord.cjs", "../../../node_modules/astronomia/lib/nutation.cjs", "../../../node_modules/astronomia/lib/elementequinox.cjs", "../../../node_modules/astronomia/lib/precess.cjs", "../../../node_modules/astronomia/lib/solar.cjs", "../../../node_modules/astronomia/lib/apparent.cjs", "../../../node_modules/astronomia/lib/apsis.cjs", "../../../node_modules/astronomia/lib/binary.cjs", "../../../node_modules/astronomia/lib/conjunction.cjs", "../../../node_modules/astronomia/lib/circle.cjs", "../../../node_modules/astronomia/lib/data/deltat.cjs", "../../../node_modules/astronomia/lib/deltat.cjs", "../../../node_modules/astronomia/lib/iterate.cjs", "../../../node_modules/astronomia/lib/kepler.cjs", "../../../node_modules/astronomia/lib/planetposition.cjs", "../../../node_modules/astronomia/lib/solarxyz.cjs", "../../../node_modules/astronomia/lib/elliptic.cjs", "../../../node_modules/astronomia/lib/moonphase.cjs", "../../../node_modules/astronomia/lib/eclipse.cjs", "../../../node_modules/astronomia/lib/elp.cjs", "../../../node_modules/astronomia/lib/eqtime.cjs", "../../../node_modules/astronomia/lib/fit.cjs", "../../../node_modules/astronomia/lib/illum.cjs", "../../../node_modules/astronomia/lib/julian.cjs", "../../../node_modules/astronomia/lib/jm.cjs", "../../../node_modules/astronomia/lib/jupiter.cjs", "../../../node_modules/astronomia/lib/planetelements.cjs", "../../../node_modules/astronomia/lib/jupitermoons.cjs", "../../../node_modules/astronomia/lib/line.cjs", "../../../node_modules/astronomia/lib/nearparabolic.cjs", "../../../node_modules/astronomia/lib/node.cjs", "../../../node_modules/astronomia/lib/mars.cjs", "../../../node_modules/astronomia/lib/moonposition.cjs", "../../../node_modules/astronomia/lib/moon.cjs", "../../../node_modules/astronomia/lib/moonillum.cjs", "../../../node_modules/astronomia/lib/moonmaxdec.cjs", "../../../node_modules/astronomia/lib/moonnode.cjs", "../../../node_modules/astronomia/lib/parabolic.cjs", "../../../node_modules/astronomia/lib/sidereal.cjs", "../../../node_modules/astronomia/lib/parallax.cjs", "../../../node_modules/astronomia/lib/parallactic.cjs", "../../../node_modules/astronomia/lib/perihelion.cjs", "../../../node_modules/astronomia/lib/planetary.cjs", "../../../node_modules/astronomia/lib/pluto.cjs", "../../../node_modules/astronomia/lib/refraction.cjs", "../../../node_modules/astronomia/lib/rise.cjs", "../../../node_modules/astronomia/lib/saturnmoons.cjs", "../../../node_modules/astronomia/lib/saturnring.cjs", "../../../node_modules/astronomia/lib/solardisk.cjs", "../../../node_modules/astronomia/lib/solstice.cjs", "../../../node_modules/astronomia/lib/stellar.cjs", "../../../node_modules/astronomia/lib/sundial.cjs", "../../../node_modules/astronomia/lib/sunrise.cjs", "../../../node_modules/astronomia/lib/index.cjs", "../../../node_modules/date-holidays-parser/lib/Julian.cjs", "../../../node_modules/jalaali-js/index.js", "../../../node_modules/date-holidays-parser/lib/Jalaali.cjs", "../../../node_modules/date-holidays-parser/lib/CalEventMap.cjs", "../../../node_modules/date-holidays-parser/lib/internal/hebrew-calendar.cjs", "../../../node_modules/date-holidays-parser/lib/Hebrew.cjs", "../../../node_modules/date-holidays-parser/lib/internal/hijri-calendar.cjs", "../../../node_modules/date-holidays-parser/lib/Hijri.cjs", "../../../node_modules/astronomia/lib/data/vsop87Bearth.cjs", "../../../node_modules/date-holidays-parser/lib/vsop87Bearth.cjs", "../../../node_modules/date-holidays-parser/lib/Equinox.cjs", "../../../node_modules/date-chinese/lib/vsop87Bearth.cjs", "../../../node_modules/date-chinese/lib/Chinese.cjs", "../../../node_modules/date-chinese/lib/Korean.cjs", "../../../node_modules/date-chinese/lib/Vietnamese.cjs", "../../../node_modules/date-chinese/lib/Japanese.cjs", "../../../node_modules/date-chinese/lib/index.cjs", "../../../node_modules/date-holidays-parser/lib/Chinese.cjs", "../../../node_modules/date-bengali-revised/lib/convert.cjs", "../../../node_modules/date-bengali-revised/lib/index.cjs", "../../../node_modules/date-holidays-parser/lib/BengaliRevised.cjs", "../../../node_modules/date-holidays-parser/lib/CalEventFactory.cjs", "../../../node_modules/date-holidays-parser/lib/DateFn.cjs", "../../../node_modules/date-holidays-parser/lib/HolidayRule.cjs", "../../../node_modules/date-holidays-parser/lib/Holidays.cjs", "../../../node_modules/date-holidays-parser/lib/index.cjs", "../../../node_modules/date-holidays/lib/data.cjs", "../../../node_modules/date-holidays/lib/Holidays.cjs", "../../../node_modules/date-holidays/lib/index.cjs", "../../../node_modules/jquery/dist/jquery.js", "../../../node_modules/@rails/activestorage/app/assets/javascripts/activestorage.js", "../../../node_modules/@hotwired/turbo/dist/turbo.es2017-esm.js", "../../../node_modules/@hotwired/turbo-rails/app/javascript/turbo/cable.js", "../../../node_modules/@hotwired/turbo-rails/app/javascript/turbo/cable_stream_source_element.js", "../../../node_modules/@hotwired/stimulus/dist/stimulus.js", "../../javascript/controllers/application.js", "../../javascript/controllers/calculation_tool_controller.js", "../../javascript/controllers/calendar_controller.js", "../../javascript/controllers/cases_controller.js", "../../javascript/controllers/forms_controller.js", "../../javascript/controllers/menu_controller.js", "../../javascript/controllers/tasks_controller.js", "../../javascript/controllers/translator_controller.js", "../../javascript/controllers/index.js", "../../../node_modules/@fortawesome/fontawesome-free/js/all.js", "../../javascript/application.js", "../../../node_modules/alpinejs/dist/module.esm.js", "../../../node_modules/trix/dist/trix.js", "../../../node_modules/@rails/actiontext/app/javascript/actiontext/attachment_upload.js", "../../../node_modules/@rails/actiontext/app/javascript/actiontext/index.js", "../../../node_modules/caldate/src/CalDate.js", "../../../node_modules/date-holidays-parser/src/utils.js", "../../../node_modules/date-holidays-parser/src/internal/utils.js", "../../../node_modules/date-holidays-parser/src/Data.js", "../../../node_modules/date-holidays-parser/src/Parser.js", "../../../node_modules/astronomia/src/base.js", "../../../node_modules/astronomia/src/interpolation.js", "../../../node_modules/astronomia/src/angle.js", "../../../node_modules/astronomia/src/sexagesimal.js", "../../../node_modules/astronomia/src/globe.js", "../../../node_modules/astronomia/src/coord.js", "../../../node_modules/astronomia/src/nutation.js", "../../../node_modules/astronomia/src/elementequinox.js", "../../../node_modules/astronomia/src/precess.js", "../../../node_modules/astronomia/src/planetposition.js", "../../../node_modules/astronomia/src/solar.js", "../../../node_modules/astronomia/src/apparent.js", "../../../node_modules/astronomia/src/apsis.js", "../../../node_modules/astronomia/src/binary.js", "../../../node_modules/astronomia/src/conjunction.js", "../../../node_modules/astronomia/src/circle.js", "../../../node_modules/astronomia/data/deltat.js", "../../../node_modules/astronomia/src/deltat.js", "../../../node_modules/astronomia/src/iterate.js", "../../../node_modules/astronomia/src/kepler.js", "../../../node_modules/astronomia/src/solarxyz.js", "../../../node_modules/astronomia/src/elliptic.js", "../../../node_modules/astronomia/src/moonphase.js", "../../../node_modules/astronomia/src/eclipse.js", "../../../node_modules/astronomia/src/elp.js", "../../../node_modules/astronomia/src/eqtime.js", "../../../node_modules/astronomia/src/fit.js", "../../../node_modules/astronomia/src/illum.js", "../../../node_modules/astronomia/src/julian.js", "../../../node_modules/astronomia/src/jm.js", "../../../node_modules/astronomia/src/jupiter.js", "../../../node_modules/astronomia/src/planetelements.js", "../../../node_modules/astronomia/src/jupitermoons.js", "../../../node_modules/astronomia/src/line.js", "../../../node_modules/astronomia/src/nearparabolic.js", "../../../node_modules/astronomia/src/node.js", "../../../node_modules/astronomia/src/mars.js", "../../../node_modules/astronomia/src/moonposition.js", "../../../node_modules/astronomia/src/moon.js", "../../../node_modules/astronomia/src/moonillum.js", "../../../node_modules/astronomia/src/moonmaxdec.js", "../../../node_modules/astronomia/src/moonnode.js", "../../../node_modules/astronomia/src/parabolic.js", "../../../node_modules/astronomia/src/sidereal.js", "../../../node_modules/astronomia/src/parallax.js", "../../../node_modules/astronomia/src/parallactic.js", "../../../node_modules/astronomia/src/perihelion.js", "../../../node_modules/astronomia/src/planetary.js", "../../../node_modules/astronomia/src/pluto.js", "../../../node_modules/astronomia/src/refraction.js", "../../../node_modules/astronomia/src/rise.js", "../../../node_modules/astronomia/src/saturnmoons.js", "../../../node_modules/astronomia/src/saturnring.js", "../../../node_modules/astronomia/src/solardisk.js", "../../../node_modules/astronomia/src/solstice.js", "../../../node_modules/astronomia/src/stellar.js", "../../../node_modules/astronomia/src/sundial.js", "../../../node_modules/astronomia/src/sunrise.js", "../../../node_modules/date-holidays-parser/src/Jalaali.js", "../../../node_modules/astronomia/data/vsop87Bearth.js", "../../../node_modules/date-holidays-parser/src/vsop87Bearth.js", "../../../node_modules/date-holidays-parser/src/Equinox.js", "../../../node_modules/date-chinese/src/vsop87Bearth.js", "../../../node_modules/date-chinese/src/Chinese.js", "../../../node_modules/date-chinese/src/Korean.js", "../../../node_modules/date-chinese/src/Vietnamese.js", "../../../node_modules/date-chinese/src/Japanese.js", "../../../node_modules/date-chinese/src/index.js", "../../../node_modules/date-bengali-revised/src/index.js", "../../../node_modules/date-holidays-parser/src/Holidays.js", "../../../node_modules/date-holidays/src/Holidays.js", "../../../node_modules/tw-elements/dist/js/webpack:/webpack/bootstrap", "../../../node_modules/tw-elements/dist/js/webpack:/node_modules/core-js/internals/global.js", "../../../node_modules/tw-elements/dist/js/webpack:/node_modules/core-js/internals/function-uncurry-this.js", "../../../node_modules/tw-elements/dist/js/webpack:/node_modules/core-js/internals/fails.js", "../../../node_modules/tw-elements/dist/js/webpack:/node_modules/core-js/internals/export.js", "../../../node_modules/tw-elements/dist/js/webpack:/node_modules/core-js/modules/es.object.to-string.js", "../../../node_modules/tw-elements/dist/js/webpack:/node_modules/core-js/modules/es.array.iterator.js", "../../../node_modules/tw-elements/dist/js/webpack:/node_modules/core-js/modules/es.string.iterator.js", "../../../node_modules/tw-elements/dist/js/webpack:/node_modules/core-js/modules/es.symbol.js", "../../../node_modules/tw-elements/dist/js/webpack:/node_modules/core-js/modules/web.dom-collections.iterator.js", "../../../node_modules/tw-elements/dist/js/webpack:/node_modules/core-js/modules/web.dom-collections.for-each.js", "../../../node_modules/tw-elements/dist/js/webpack:/node_modules/core-js/modules/es.symbol.description.js", "../../../node_modules/tw-elements/dist/js/webpack:/node_modules/core-js/modules/es.symbol.iterator.js", "../../../node_modules/tw-elements/dist/js/webpack:/node_modules/core-js/internals/well-known-symbol.js", "../../../node_modules/tw-elements/dist/js/webpack:/node_modules/core-js/modules/es.object.keys.js", "../../../node_modules/tw-elements/dist/js/webpack:/node_modules/core-js/internals/is-callable.js", "../../../node_modules/tw-elements/dist/js/webpack:/node_modules/core-js/modules/es.array.filter.js", "../../../node_modules/tw-elements/dist/js/webpack:/node_modules/core-js/modules/es.regexp.exec.js", "../../../node_modules/tw-elements/dist/js/webpack:/node_modules/core-js/internals/descriptors.js", "../../../node_modules/tw-elements/dist/js/webpack:/node_modules/core-js/internals/an-object.js", "../../../node_modules/tw-elements/dist/js/webpack:/node_modules/core-js/internals/is-object.js", "../../../node_modules/tw-elements/dist/js/webpack:/node_modules/core-js/internals/has-own-property.js", "../../../node_modules/tw-elements/dist/js/webpack:/node_modules/core-js/internals/function-call.js", "../../../node_modules/tw-elements/dist/js/webpack:/node_modules/core-js/internals/object-define-property.js", "../../../node_modules/tw-elements/dist/js/webpack:/node_modules/core-js/internals/to-string.js", "../../../node_modules/tw-elements/dist/js/webpack:/node_modules/core-js/modules/es.object.get-own-property-descriptor.js", "../../../node_modules/tw-elements/dist/js/webpack:/node_modules/core-js/modules/es.object.get-own-property-descriptors.js", "../../../node_modules/tw-elements/dist/js/webpack:/node_modules/core-js/modules/es.array.concat.js", "../../../node_modules/tw-elements/dist/js/webpack:/node_modules/core-js/modules/es.array.slice.js", "../../../node_modules/tw-elements/dist/js/webpack:/node_modules/core-js/modules/es.array.find.js", "../../../node_modules/tw-elements/dist/js/webpack:/node_modules/core-js/modules/es.object.set-prototype-of.js", "../../../node_modules/tw-elements/dist/js/webpack:/node_modules/core-js/internals/to-indexed-object.js", "../../../node_modules/tw-elements/dist/js/webpack:/node_modules/core-js/modules/es.object.get-prototype-of.js", "../../../node_modules/tw-elements/dist/js/webpack:/node_modules/core-js/modules/es.reflect.construct.js", "../../../node_modules/tw-elements/dist/js/webpack:/node_modules/core-js/modules/es.array.includes.js", "../../../node_modules/tw-elements/dist/js/webpack:/node_modules/core-js/modules/es.number.constructor.js", "../../../node_modules/tw-elements/dist/js/webpack:/node_modules/core-js/modules/es.array.from.js", "../../../node_modules/tw-elements/dist/js/webpack:/node_modules/core-js/internals/to-object.js", "../../../node_modules/tw-elements/dist/js/webpack:/node_modules/core-js/internals/redefine.js", "../../../node_modules/tw-elements/dist/js/webpack:/node_modules/core-js/modules/es.string.split.js", "../../../node_modules/tw-elements/dist/js/webpack:/node_modules/core-js/internals/require-object-coercible.js", "../../../node_modules/tw-elements/dist/js/webpack:/node_modules/core-js/modules/es.regexp.to-string.js", "../../../node_modules/tw-elements/dist/js/webpack:/node_modules/core-js/modules/es.function.name.js", "../../../node_modules/tw-elements/dist/js/webpack:/node_modules/core-js/internals/object-get-own-property-descriptor.js", "../../../node_modules/tw-elements/dist/js/webpack:/node_modules/core-js/internals/get-built-in.js", "../../../node_modules/tw-elements/dist/js/webpack:/node_modules/core-js/internals/object-is-prototype-of.js", "../../../node_modules/tw-elements/dist/js/webpack:/node_modules/core-js/internals/create-non-enumerable-property.js", "../../../node_modules/tw-elements/dist/js/webpack:/node_modules/core-js/internals/length-of-array-like.js", "../../../node_modules/tw-elements/dist/js/webpack:/node_modules/core-js/modules/es.string.replace.js", "../../../node_modules/tw-elements/dist/js/webpack:/node_modules/core-js/internals/classof-raw.js", "../../../node_modules/tw-elements/dist/js/webpack:/node_modules/core-js/internals/internal-state.js", "../../../node_modules/tw-elements/dist/js/webpack:/node_modules/core-js/internals/object-create.js", "../../../node_modules/tw-elements/dist/js/webpack:/node_modules/core-js/modules/es.string.includes.js", "../../../node_modules/tw-elements/dist/js/webpack:/node_modules/core-js/modules/es.regexp.constructor.js", "../../../node_modules/tw-elements/dist/js/webpack:/node_modules/core-js/internals/get-method.js", "../../../node_modules/tw-elements/dist/js/webpack:/node_modules/core-js/internals/is-pure.js", "../../../node_modules/tw-elements/dist/js/webpack:/node_modules/core-js/internals/object-get-own-property-names.js", "../../../node_modules/tw-elements/dist/js/webpack:/node_modules/core-js/internals/array-iteration.js", "../../../node_modules/tw-elements/dist/js/webpack:/node_modules/core-js/modules/es.string.starts-with.js", "../../../node_modules/tw-elements/dist/js/webpack:/node_modules/core-js/modules/es.array.map.js", "../../../node_modules/tw-elements/dist/js/webpack:/node_modules/core-js/modules/es.reflect.get.js", "../../../node_modules/tw-elements/dist/js/webpack:/node_modules/core-js/internals/function-bind-native.js", "../../../node_modules/tw-elements/dist/js/webpack:/node_modules/core-js/internals/create-property-descriptor.js", "../../../node_modules/tw-elements/dist/js/webpack:/node_modules/core-js/internals/a-callable.js", "../../../node_modules/tw-elements/dist/js/webpack:/node_modules/core-js/internals/hidden-keys.js", "../../../node_modules/tw-elements/dist/js/webpack:/node_modules/core-js/internals/function-name.js", "../../../node_modules/tw-elements/dist/js/webpack:/node_modules/core-js/internals/to-length.js", "../../../node_modules/tw-elements/dist/js/webpack:/node_modules/core-js/internals/object-keys.js", "../../../node_modules/tw-elements/dist/js/webpack:/node_modules/core-js/internals/create-property.js", "../../../node_modules/tw-elements/dist/js/webpack:/node_modules/core-js/internals/iterators.js", "../../../node_modules/tw-elements/dist/js/webpack:/node_modules/core-js/modules/es.string.match.js", "../../../node_modules/tw-elements/dist/js/webpack:/node_modules/core-js/internals/object-property-is-enumerable.js", "../../../node_modules/tw-elements/dist/js/webpack:/node_modules/core-js/internals/indexed-object.js", "../../../node_modules/tw-elements/dist/js/webpack:/node_modules/core-js/internals/to-property-key.js", "../../../node_modules/tw-elements/dist/js/webpack:/node_modules/core-js/internals/is-symbol.js", "../../../node_modules/tw-elements/dist/js/webpack:/node_modules/core-js/internals/engine-v8-version.js", "../../../node_modules/tw-elements/dist/js/webpack:/node_modules/core-js/internals/engine-user-agent.js", "../../../node_modules/tw-elements/dist/js/webpack:/node_modules/core-js/internals/try-to-string.js", "../../../node_modules/tw-elements/dist/js/webpack:/node_modules/core-js/internals/shared.js", "../../../node_modules/tw-elements/dist/js/webpack:/node_modules/core-js/internals/uid.js", "../../../node_modules/tw-elements/dist/js/webpack:/node_modules/core-js/internals/shared-key.js", "../../../node_modules/tw-elements/dist/js/webpack:/node_modules/core-js/internals/to-integer-or-infinity.js", "../../../node_modules/tw-elements/dist/js/webpack:/node_modules/core-js/internals/is-forced.js", "../../../node_modules/tw-elements/dist/js/webpack:/node_modules/core-js/internals/object-get-prototype-of.js", "../../../node_modules/tw-elements/dist/js/webpack:/node_modules/core-js/internals/classof.js", "../../../node_modules/tw-elements/dist/js/webpack:/node_modules/core-js/internals/function-apply.js", "../../../node_modules/tw-elements/dist/js/webpack:/node_modules/core-js/internals/is-constructor.js", "../../../node_modules/tw-elements/dist/js/webpack:/node_modules/core-js/internals/is-array.js", "../../../node_modules/tw-elements/dist/js/webpack:/node_modules/core-js/internals/set-to-string-tag.js", "../../../node_modules/tw-elements/dist/js/webpack:/node_modules/core-js/internals/function-bind-context.js", "../../../node_modules/tw-elements/dist/js/webpack:/node_modules/core-js/internals/add-to-unscopables.js", "../../../node_modules/tw-elements/dist/js/webpack:/node_modules/core-js/internals/regexp-exec.js", "../../../node_modules/tw-elements/dist/js/webpack:/node_modules/core-js/modules/es.string.trim.js", "../../../node_modules/tw-elements/dist/js/webpack:/node_modules/core-js/internals/string-trim.js", "../../../node_modules/tw-elements/dist/js/webpack:/node_modules/core-js/internals/whitespaces.js", "../../../node_modules/tw-elements/dist/js/webpack:/node_modules/core-js/internals/array-method-has-species-support.js", "../../../node_modules/tw-elements/dist/js/webpack:/node_modules/core-js/modules/es.array.join.js", "../../../node_modules/tw-elements/dist/js/webpack:/node_modules/core-js/internals/native-symbol.js", "../../../node_modules/tw-elements/dist/js/webpack:/node_modules/core-js/internals/shared-store.js", "../../../node_modules/tw-elements/dist/js/webpack:/node_modules/core-js/internals/set-global.js", "../../../node_modules/tw-elements/dist/js/webpack:/node_modules/core-js/internals/document-create-element.js", "../../../node_modules/tw-elements/dist/js/webpack:/node_modules/core-js/internals/inspect-source.js", "../../../node_modules/tw-elements/dist/js/webpack:/node_modules/core-js/internals/to-absolute-index.js", "../../../node_modules/tw-elements/dist/js/webpack:/node_modules/core-js/internals/enum-bug-keys.js", "../../../node_modules/tw-elements/dist/js/webpack:/node_modules/core-js/internals/object-get-own-property-symbols.js", "../../../node_modules/tw-elements/dist/js/webpack:/node_modules/core-js/internals/object-set-prototype-of.js", "../../../node_modules/tw-elements/dist/js/webpack:/node_modules/core-js/internals/to-string-tag-support.js", "../../../node_modules/tw-elements/dist/js/webpack:/node_modules/core-js/internals/array-slice.js", "../../../node_modules/tw-elements/dist/js/webpack:/node_modules/core-js/internals/object-get-own-property-names-external.js", "../../../node_modules/tw-elements/dist/js/webpack:/node_modules/core-js/internals/array-slice-simple.js", "../../../node_modules/tw-elements/dist/js/webpack:/node_modules/core-js/internals/define-iterator.js", "../../../node_modules/tw-elements/dist/js/webpack:/node_modules/core-js/internals/regexp-flags.js", "../../../node_modules/tw-elements/dist/js/webpack:/node_modules/core-js/internals/regexp-sticky-helpers.js", "../../../node_modules/tw-elements/dist/js/webpack:/node_modules/core-js/internals/fix-regexp-well-known-symbol-logic.js", "../../../node_modules/tw-elements/dist/js/webpack:/node_modules/core-js/internals/advance-string-index.js", "../../../node_modules/tw-elements/dist/js/webpack:/node_modules/core-js/internals/regexp-exec-abstract.js", "../../../node_modules/tw-elements/dist/js/webpack:/node_modules/core-js/internals/is-regexp.js", "../../../node_modules/tw-elements/dist/js/webpack:/node_modules/core-js/modules/es.number.parse-float.js", "../../../node_modules/tw-elements/dist/js/webpack:/node_modules/core-js/internals/inherit-if-required.js", "../../../node_modules/tw-elements/dist/js/webpack:/node_modules/core-js/internals/array-method-is-strict.js", "../../../node_modules/tw-elements/dist/js/webpack:/node_modules/core-js/modules/es.set.js", "../../../node_modules/tw-elements/dist/js/webpack:/node_modules/core-js/internals/get-iterator-method.js", "../../../node_modules/tw-elements/dist/js/webpack:/node_modules/core-js/modules/es.number.parse-int.js", "../../../node_modules/tw-elements/dist/js/webpack:/node_modules/core-js/internals/to-primitive.js", "../../../node_modules/tw-elements/dist/js/webpack:/node_modules/core-js/internals/use-symbol-as-uid.js", "../../../node_modules/tw-elements/dist/js/webpack:/node_modules/core-js/internals/ie8-dom-define.js", "../../../node_modules/tw-elements/dist/js/webpack:/node_modules/core-js/internals/v8-prototype-define-bug.js", "../../../node_modules/tw-elements/dist/js/webpack:/node_modules/core-js/internals/copy-constructor-properties.js", "../../../node_modules/tw-elements/dist/js/webpack:/node_modules/core-js/internals/own-keys.js", "../../../node_modules/tw-elements/dist/js/webpack:/node_modules/core-js/internals/object-keys-internal.js", "../../../node_modules/tw-elements/dist/js/webpack:/node_modules/core-js/internals/array-includes.js", "../../../node_modules/tw-elements/dist/js/webpack:/node_modules/core-js/internals/correct-prototype-getter.js", "../../../node_modules/tw-elements/dist/js/webpack:/node_modules/core-js/internals/a-constructor.js", "../../../node_modules/tw-elements/dist/js/webpack:/node_modules/core-js/internals/object-define-properties.js", "../../../node_modules/tw-elements/dist/js/webpack:/node_modules/core-js/internals/well-known-symbol-wrapped.js", "../../../node_modules/tw-elements/dist/js/webpack:/node_modules/core-js/internals/define-well-known-symbol.js", "../../../node_modules/tw-elements/dist/js/webpack:/node_modules/core-js/internals/array-species-create.js", "../../../node_modules/tw-elements/dist/js/webpack:/node_modules/core-js/internals/iterators-core.js", "../../../node_modules/tw-elements/dist/js/webpack:/node_modules/core-js/internals/string-multibyte.js", "../../../node_modules/tw-elements/dist/js/webpack:/node_modules/core-js/internals/dom-iterables.js", "../../../node_modules/tw-elements/dist/js/webpack:/node_modules/core-js/internals/dom-token-list-prototype.js", "../../../node_modules/tw-elements/dist/js/webpack:/node_modules/core-js/internals/regexp-unsupported-dot-all.js", "../../../node_modules/tw-elements/dist/js/webpack:/node_modules/core-js/internals/regexp-unsupported-ncg.js", "../../../node_modules/tw-elements/dist/js/webpack:/node_modules/core-js/internals/not-a-regexp.js", "../../../node_modules/tw-elements/dist/js/webpack:/node_modules/core-js/internals/correct-is-regexp-logic.js", "../../../node_modules/tw-elements/dist/js/webpack:/node_modules/core-js/internals/set-species.js", "../../../node_modules/tw-elements/dist/js/webpack:/node_modules/core-js/internals/collection.js", "../../../node_modules/tw-elements/dist/js/webpack:/node_modules/core-js/internals/internal-metadata.js", "../../../node_modules/tw-elements/dist/js/webpack:/node_modules/core-js/internals/iterate.js", "../../../node_modules/tw-elements/dist/js/webpack:/node_modules/core-js/internals/is-array-iterator-method.js", "../../../node_modules/tw-elements/dist/js/webpack:/node_modules/core-js/internals/get-iterator.js", "../../../node_modules/tw-elements/dist/js/webpack:/node_modules/core-js/internals/iterator-close.js", "../../../node_modules/tw-elements/dist/js/webpack:/node_modules/core-js/internals/an-instance.js", "../../../node_modules/tw-elements/dist/js/webpack:/node_modules/core-js/internals/check-correctness-of-iteration.js", "../../../node_modules/tw-elements/dist/js/webpack:/node_modules/core-js/internals/collection-strong.js", "../../../node_modules/tw-elements/dist/js/webpack:/(webpack)/buildin/global.js", "../../../node_modules/tw-elements/dist/js/webpack:/node_modules/core-js/internals/ordinary-to-primitive.js", "../../../node_modules/tw-elements/dist/js/webpack:/node_modules/core-js/internals/native-weak-map.js", "../../../node_modules/tw-elements/dist/js/webpack:/node_modules/core-js/internals/a-possible-prototype.js", "../../../node_modules/tw-elements/dist/js/webpack:/node_modules/core-js/internals/object-to-string.js", "../../../node_modules/tw-elements/dist/js/webpack:/node_modules/core-js/internals/function-bind.js", "../../../node_modules/tw-elements/dist/js/webpack:/node_modules/core-js/internals/html.js", "../../../node_modules/tw-elements/dist/js/webpack:/node_modules/core-js/internals/path.js", "../../../node_modules/tw-elements/dist/js/webpack:/node_modules/core-js/internals/array-species-constructor.js", "../../../node_modules/tw-elements/dist/js/webpack:/node_modules/core-js/internals/create-iterator-constructor.js", "../../../node_modules/tw-elements/dist/js/webpack:/node_modules/core-js/internals/species-constructor.js", "../../../node_modules/tw-elements/dist/js/webpack:/node_modules/core-js/internals/string-trim-forced.js", "../../../node_modules/tw-elements/dist/js/webpack:/node_modules/core-js/internals/number-parse-float.js", "../../../node_modules/tw-elements/dist/js/webpack:/node_modules/core-js/internals/this-number-value.js", "../../../node_modules/tw-elements/dist/js/webpack:/node_modules/core-js/internals/array-for-each.js", "../../../node_modules/tw-elements/dist/js/webpack:/node_modules/core-js/internals/object-is-extensible.js", "../../../node_modules/tw-elements/dist/js/webpack:/node_modules/core-js/internals/array-buffer-non-extensible.js", "../../../node_modules/tw-elements/dist/js/webpack:/node_modules/core-js/internals/freezing.js", "../../../node_modules/tw-elements/dist/js/webpack:/node_modules/core-js/internals/redefine-all.js", "../../../node_modules/tw-elements/dist/js/webpack:/node_modules/core-js/internals/get-substitution.js", "../../../node_modules/tw-elements/dist/js/webpack:/node_modules/core-js/internals/array-from.js", "../../../node_modules/tw-elements/dist/js/webpack:/node_modules/core-js/internals/call-with-safe-iteration-closing.js", "../../../node_modules/tw-elements/dist/js/webpack:/node_modules/core-js/modules/es.object.get-own-property-names.js", "../../../node_modules/tw-elements/dist/js/webpack:/node_modules/core-js/modules/es.map.js", "../../../node_modules/tw-elements/dist/js/webpack:/node_modules/core-js/internals/number-parse-int.js", "../../../node_modules/tw-elements/dist/js/webpack:/node_modules/core-js/internals/is-data-descriptor.js", "../../../node_modules/tw-elements/dist/js/webpack:/node_modules/core-js/modules/es.array.sort.js", "../../../node_modules/tw-elements/dist/js/webpack:/node_modules/core-js/internals/array-sort.js", "../../../node_modules/tw-elements/dist/js/webpack:/node_modules/core-js/internals/engine-ff-version.js", "../../../node_modules/tw-elements/dist/js/webpack:/node_modules/core-js/internals/engine-is-ie-or-edge.js", "../../../node_modules/tw-elements/dist/js/webpack:/node_modules/core-js/internals/engine-webkit-version.js", "../../../node_modules/tw-elements/dist/js/webpack:/node_modules/core-js/modules/es.object.assign.js", "../../../node_modules/tw-elements/dist/js/webpack:/node_modules/core-js/internals/object-assign.js", "../../../node_modules/tw-elements/dist/js/webpack:/node_modules/core-js/modules/es.array.find-index.js", "../../../node_modules/tw-elements/dist/js/webpack:/node_modules/core-js/modules/es.number.is-nan.js", "../../../node_modules/tw-elements/dist/js/webpack:/node_modules/core-js/modules/es.object.values.js", "../../../node_modules/tw-elements/dist/js/webpack:/node_modules/core-js/internals/object-to-array.js", "../../../node_modules/tw-elements/dist/js/webpack:/node_modules/core-js/modules/es.math.trunc.js", "../../../node_modules/tw-elements/dist/js/webpack:/src/js/bs/src/util/index.js", "../../../node_modules/tw-elements/dist/js/webpack:/src/js/bs/src/dom/event-handler.js", "../../../node_modules/tw-elements/dist/js/webpack:/src/js/bs/src/dom/data.js", "../../../node_modules/tw-elements/dist/js/webpack:/src/js/bs/src/base-component.js", "../../../node_modules/tw-elements/dist/js/webpack:/src/js/bs/src/button.js", "../../../node_modules/tw-elements/dist/js/webpack:/node_modules/@popperjs/core/lib/enums.js", "../../../node_modules/tw-elements/dist/js/webpack:/node_modules/@popperjs/core/lib/dom-utils/getNodeName.js", "../../../node_modules/tw-elements/dist/js/webpack:/node_modules/@popperjs/core/lib/dom-utils/getWindow.js", "../../../node_modules/tw-elements/dist/js/webpack:/node_modules/@popperjs/core/lib/dom-utils/instanceOf.js", "../../../node_modules/tw-elements/dist/js/webpack:/node_modules/@popperjs/core/lib/modifiers/applyStyles.js", "../../../node_modules/tw-elements/dist/js/webpack:/node_modules/@popperjs/core/lib/utils/getBasePlacement.js", "../../../node_modules/tw-elements/dist/js/webpack:/node_modules/@popperjs/core/lib/utils/math.js", "../../../node_modules/tw-elements/dist/js/webpack:/node_modules/@popperjs/core/lib/dom-utils/getBoundingClientRect.js", "../../../node_modules/tw-elements/dist/js/webpack:/node_modules/@popperjs/core/lib/dom-utils/getLayoutRect.js", "../../../node_modules/tw-elements/dist/js/webpack:/node_modules/@popperjs/core/lib/dom-utils/contains.js", "../../../node_modules/tw-elements/dist/js/webpack:/node_modules/@popperjs/core/lib/dom-utils/getComputedStyle.js", "../../../node_modules/tw-elements/dist/js/webpack:/node_modules/@popperjs/core/lib/dom-utils/getDocumentElement.js", "../../../node_modules/tw-elements/dist/js/webpack:/node_modules/@popperjs/core/lib/dom-utils/getParentNode.js", "../../../node_modules/tw-elements/dist/js/webpack:/node_modules/@popperjs/core/lib/dom-utils/getOffsetParent.js", "../../../node_modules/tw-elements/dist/js/webpack:/node_modules/@popperjs/core/lib/dom-utils/isTableElement.js", "../../../node_modules/tw-elements/dist/js/webpack:/node_modules/@popperjs/core/lib/utils/getMainAxisFromPlacement.js", "../../../node_modules/tw-elements/dist/js/webpack:/node_modules/@popperjs/core/lib/utils/within.js", "../../../node_modules/tw-elements/dist/js/webpack:/node_modules/@popperjs/core/lib/utils/getFreshSideObject.js", "../../../node_modules/tw-elements/dist/js/webpack:/node_modules/@popperjs/core/lib/utils/mergePaddingObject.js", "../../../node_modules/tw-elements/dist/js/webpack:/node_modules/@popperjs/core/lib/utils/expandToHashMap.js", "../../../node_modules/tw-elements/dist/js/webpack:/node_modules/@popperjs/core/lib/modifiers/arrow.js", "../../../node_modules/tw-elements/dist/js/webpack:/node_modules/@popperjs/core/lib/utils/getVariation.js", "../../../node_modules/tw-elements/dist/js/webpack:/node_modules/@popperjs/core/lib/modifiers/computeStyles.js", "../../../node_modules/tw-elements/dist/js/webpack:/node_modules/@popperjs/core/lib/modifiers/eventListeners.js", "../../../node_modules/tw-elements/dist/js/webpack:/node_modules/@popperjs/core/lib/utils/getOppositePlacement.js", "../../../node_modules/tw-elements/dist/js/webpack:/node_modules/@popperjs/core/lib/utils/getOppositeVariationPlacement.js", "../../../node_modules/tw-elements/dist/js/webpack:/node_modules/@popperjs/core/lib/dom-utils/getWindowScroll.js", "../../../node_modules/tw-elements/dist/js/webpack:/node_modules/@popperjs/core/lib/dom-utils/getWindowScrollBarX.js", "../../../node_modules/tw-elements/dist/js/webpack:/node_modules/@popperjs/core/lib/dom-utils/isScrollParent.js", "../../../node_modules/tw-elements/dist/js/webpack:/node_modules/@popperjs/core/lib/dom-utils/listScrollParents.js", "../../../node_modules/tw-elements/dist/js/webpack:/node_modules/@popperjs/core/lib/dom-utils/getScrollParent.js", "../../../node_modules/tw-elements/dist/js/webpack:/node_modules/@popperjs/core/lib/utils/rectToClientRect.js", "../../../node_modules/tw-elements/dist/js/webpack:/node_modules/@popperjs/core/lib/dom-utils/getClippingRect.js", "../../../node_modules/tw-elements/dist/js/webpack:/node_modules/@popperjs/core/lib/dom-utils/getViewportRect.js", "../../../node_modules/tw-elements/dist/js/webpack:/node_modules/@popperjs/core/lib/dom-utils/getDocumentRect.js", "../../../node_modules/tw-elements/dist/js/webpack:/node_modules/@popperjs/core/lib/utils/computeOffsets.js", "../../../node_modules/tw-elements/dist/js/webpack:/node_modules/@popperjs/core/lib/utils/detectOverflow.js", "../../../node_modules/tw-elements/dist/js/webpack:/node_modules/@popperjs/core/lib/modifiers/flip.js", "../../../node_modules/tw-elements/dist/js/webpack:/node_modules/@popperjs/core/lib/utils/computeAutoPlacement.js", "../../../node_modules/tw-elements/dist/js/webpack:/node_modules/@popperjs/core/lib/modifiers/hide.js", "../../../node_modules/tw-elements/dist/js/webpack:/node_modules/@popperjs/core/lib/modifiers/offset.js", "../../../node_modules/tw-elements/dist/js/webpack:/node_modules/@popperjs/core/lib/modifiers/popperOffsets.js", "../../../node_modules/tw-elements/dist/js/webpack:/node_modules/@popperjs/core/lib/modifiers/preventOverflow.js", "../../../node_modules/tw-elements/dist/js/webpack:/node_modules/@popperjs/core/lib/utils/getAltAxis.js", "../../../node_modules/tw-elements/dist/js/webpack:/node_modules/@popperjs/core/lib/dom-utils/getCompositeRect.js", "../../../node_modules/tw-elements/dist/js/webpack:/node_modules/@popperjs/core/lib/dom-utils/getNodeScroll.js", "../../../node_modules/tw-elements/dist/js/webpack:/node_modules/@popperjs/core/lib/dom-utils/getHTMLElementScroll.js", "../../../node_modules/tw-elements/dist/js/webpack:/node_modules/@popperjs/core/lib/utils/orderModifiers.js", "../../../node_modules/tw-elements/dist/js/webpack:/node_modules/@popperjs/core/lib/createPopper.js", "../../../node_modules/tw-elements/dist/js/webpack:/node_modules/@popperjs/core/lib/utils/debounce.js", "../../../node_modules/tw-elements/dist/js/webpack:/node_modules/@popperjs/core/lib/utils/mergeByName.js", "../../../node_modules/tw-elements/dist/js/webpack:/node_modules/@popperjs/core/lib/popper.js", "../../../node_modules/tw-elements/dist/js/webpack:/node_modules/@popperjs/core/lib/popper-lite.js", "../../../node_modules/tw-elements/dist/js/webpack:/src/js/bs/src/dom/manipulator.js", "../../../node_modules/tw-elements/dist/js/webpack:/src/js/bs/src/dom/selector-engine.js", "../../../node_modules/tw-elements/dist/js/webpack:/src/js/bs/src/dropdown.js", "../../../node_modules/tw-elements/dist/js/webpack:/src/js/bs/src/collapse.js", "../../../node_modules/tw-elements/dist/js/webpack:/src/js/bs/src/util/scrollbar.js", "../../../node_modules/tw-elements/dist/js/webpack:/src/js/bs/src/util/backdrop.js", "../../../node_modules/tw-elements/dist/js/webpack:/src/js/bs/src/util/component-functions.js", "../../../node_modules/tw-elements/dist/js/webpack:/src/js/bs/src/util/focustrap.js", "../../../node_modules/tw-elements/dist/js/webpack:/src/js/bs/src/offcanvas.js", "../../../node_modules/tw-elements/dist/js/webpack:/src/js/bs/src/alert.js", "../../../node_modules/tw-elements/dist/js/webpack:/src/js/bs/src/carousel.js", "../../../node_modules/tw-elements/dist/js/webpack:/src/js/bs/src/modal.js", "../../../node_modules/tw-elements/dist/js/webpack:/src/js/bs/src/util/sanitizer.js", "../../../node_modules/tw-elements/dist/js/webpack:/src/js/bs/src/tooltip.js", "../../../node_modules/tw-elements/dist/js/webpack:/src/js/bs/src/popover.js", "../../../node_modules/tw-elements/dist/js/webpack:/src/js/bs/src/scrollspy.js", "../../../node_modules/tw-elements/dist/js/webpack:/src/js/bs/src/tab.js", "../../../node_modules/tw-elements/dist/js/webpack:/src/js/mdb/util/index.js", "../../../node_modules/tw-elements/dist/js/webpack:/src/js/bs/src/toast.js", "../../../node_modules/tw-elements/dist/js/webpack:/src/js/mdb/dom/data.js", "../../../node_modules/tw-elements/dist/js/webpack:/src/js/mdb/dom/event-handler.js", "../../../node_modules/tw-elements/dist/js/webpack:/src/js/mdb/dom/manipulator.js", "../../../node_modules/tw-elements/dist/js/webpack:/src/js/mdb/dom/selector-engine.js", "../../../node_modules/tw-elements/dist/js/webpack:/src/js/mdb/ripple.js", "../../../node_modules/tw-elements/dist/js/webpack:/src/js/mdb/util/focusTrap.js", "../../../node_modules/tw-elements/dist/js/webpack:/src/js/mdb/datepicker/date-utils.js", "../../../node_modules/tw-elements/dist/js/webpack:/src/js/mdb/datepicker/templates.js", "../../../node_modules/tw-elements/dist/js/webpack:/src/js/mdb/datepicker/index.js", "../../../node_modules/tw-elements/dist/js/webpack:/src/js/mdb/util/keycodes.js", "../../../node_modules/tw-elements/dist/js/webpack:/src/js/mdb/timepicker/utils.js", "../../../node_modules/tw-elements/dist/js/webpack:/src/js/mdb/timepicker/index.js", "../../../node_modules/tw-elements/dist/js/webpack:/src/js/mdb/timepicker/templates.js", "../../../node_modules/tw-elements/dist/js/webpack:/src/js/mdb/stepper.js", "../../../node_modules/tw-elements/dist/js/webpack:/src/js/index.js"], "sourcesContent": ["export default {\n logger: self.console,\n WebSocket: self.WebSocket\n}\n", "import adapters from \"./adapters\"\n\n// The logger is disabled by default. You can enable it with:\n//\n// ActionCable.logger.enabled = true\n//\n// Example:\n//\n// import * as ActionCable from '@rails/actioncable'\n//\n// ActionCable.logger.enabled = true\n// ActionCable.logger.log('Connection Established.')\n//\n\nexport default {\n log(...messages) {\n if (this.enabled) {\n messages.push(Date.now())\n adapters.logger.log(\"[ActionCable]\", ...messages)\n }\n },\n}\n", "import logger from \"./logger\"\n\n// Responsible for ensuring the cable connection is in good health by validating the heartbeat pings sent from the server, and attempting\n// revival reconnections if things go astray. Internal class, not intended for direct user manipulation.\n\nconst now = () => new Date().getTime()\n\nconst secondsSince = time => (now() - time) / 1000\n\nclass ConnectionMonitor {\n constructor(connection) {\n this.visibilityDidChange = this.visibilityDidChange.bind(this)\n this.connection = connection\n this.reconnectAttempts = 0\n }\n\n start() {\n if (!this.isRunning()) {\n this.startedAt = now()\n delete this.stoppedAt\n this.startPolling()\n addEventListener(\"visibilitychange\", this.visibilityDidChange)\n logger.log(`ConnectionMonitor started. stale threshold = ${this.constructor.staleThreshold} s`)\n }\n }\n\n stop() {\n if (this.isRunning()) {\n this.stoppedAt = now()\n this.stopPolling()\n removeEventListener(\"visibilitychange\", this.visibilityDidChange)\n logger.log(\"ConnectionMonitor stopped\")\n }\n }\n\n isRunning() {\n return this.startedAt && !this.stoppedAt\n }\n\n recordPing() {\n this.pingedAt = now()\n }\n\n recordConnect() {\n this.reconnectAttempts = 0\n this.recordPing()\n delete this.disconnectedAt\n logger.log(\"ConnectionMonitor recorded connect\")\n }\n\n recordDisconnect() {\n this.disconnectedAt = now()\n logger.log(\"ConnectionMonitor recorded disconnect\")\n }\n\n // Private\n\n startPolling() {\n this.stopPolling()\n this.poll()\n }\n\n stopPolling() {\n clearTimeout(this.pollTimeout)\n }\n\n poll() {\n this.pollTimeout = setTimeout(() => {\n this.reconnectIfStale()\n this.poll()\n }\n , this.getPollInterval())\n }\n\n getPollInterval() {\n const { staleThreshold, reconnectionBackoffRate } = this.constructor\n const backoff = Math.pow(1 + reconnectionBackoffRate, Math.min(this.reconnectAttempts, 10))\n const jitterMax = this.reconnectAttempts === 0 ? 1.0 : reconnectionBackoffRate\n const jitter = jitterMax * Math.random()\n return staleThreshold * 1000 * backoff * (1 + jitter)\n }\n\n reconnectIfStale() {\n if (this.connectionIsStale()) {\n logger.log(`ConnectionMonitor detected stale connection. reconnectAttempts = ${this.reconnectAttempts}, time stale = ${secondsSince(this.refreshedAt)} s, stale threshold = ${this.constructor.staleThreshold} s`)\n this.reconnectAttempts++\n if (this.disconnectedRecently()) {\n logger.log(`ConnectionMonitor skipping reopening recent disconnect. time disconnected = ${secondsSince(this.disconnectedAt)} s`)\n } else {\n logger.log(\"ConnectionMonitor reopening\")\n this.connection.reopen()\n }\n }\n }\n\n get refreshedAt() {\n return this.pingedAt ? this.pingedAt : this.startedAt\n }\n\n connectionIsStale() {\n return secondsSince(this.refreshedAt) > this.constructor.staleThreshold\n }\n\n disconnectedRecently() {\n return this.disconnectedAt && (secondsSince(this.disconnectedAt) < this.constructor.staleThreshold)\n }\n\n visibilityDidChange() {\n if (document.visibilityState === \"visible\") {\n setTimeout(() => {\n if (this.connectionIsStale() || !this.connection.isOpen()) {\n logger.log(`ConnectionMonitor reopening stale connection on visibilitychange. visibilityState = ${document.visibilityState}`)\n this.connection.reopen()\n }\n }\n , 200)\n }\n }\n\n}\n\nConnectionMonitor.staleThreshold = 6 // Server::Connections::BEAT_INTERVAL * 2 (missed two pings)\nConnectionMonitor.reconnectionBackoffRate = 0.15\n\nexport default ConnectionMonitor\n", "export default {\n \"message_types\": {\n \"welcome\": \"welcome\",\n \"disconnect\": \"disconnect\",\n \"ping\": \"ping\",\n \"confirmation\": \"confirm_subscription\",\n \"rejection\": \"reject_subscription\"\n },\n \"disconnect_reasons\": {\n \"unauthorized\": \"unauthorized\",\n \"invalid_request\": \"invalid_request\",\n \"server_restart\": \"server_restart\"\n },\n \"default_mount_path\": \"/cable\",\n \"protocols\": [\n \"actioncable-v1-json\",\n \"actioncable-unsupported\"\n ]\n}\n", "import adapters from \"./adapters\"\nimport ConnectionMonitor from \"./connection_monitor\"\nimport INTERNAL from \"./internal\"\nimport logger from \"./logger\"\n\n// Encapsulate the cable connection held by the consumer. This is an internal class not intended for direct user manipulation.\n\nconst {message_types, protocols} = INTERNAL\nconst supportedProtocols = protocols.slice(0, protocols.length - 1)\n\nconst indexOf = [].indexOf\n\nclass Connection {\n constructor(consumer) {\n this.open = this.open.bind(this)\n this.consumer = consumer\n this.subscriptions = this.consumer.subscriptions\n this.monitor = new ConnectionMonitor(this)\n this.disconnected = true\n }\n\n send(data) {\n if (this.isOpen()) {\n this.webSocket.send(JSON.stringify(data))\n return true\n } else {\n return false\n }\n }\n\n open() {\n if (this.isActive()) {\n logger.log(`Attempted to open WebSocket, but existing socket is ${this.getState()}`)\n return false\n } else {\n logger.log(`Opening WebSocket, current state is ${this.getState()}, subprotocols: ${protocols}`)\n if (this.webSocket) { this.uninstallEventHandlers() }\n this.webSocket = new adapters.WebSocket(this.consumer.url, protocols)\n this.installEventHandlers()\n this.monitor.start()\n return true\n }\n }\n\n close({allowReconnect} = {allowReconnect: true}) {\n if (!allowReconnect) { this.monitor.stop() }\n if (this.isActive()) {\n return this.webSocket.close()\n }\n }\n\n reopen() {\n logger.log(`Reopening WebSocket, current state is ${this.getState()}`)\n if (this.isActive()) {\n try {\n return this.close()\n } catch (error) {\n logger.log(\"Failed to reopen WebSocket\", error)\n }\n finally {\n logger.log(`Reopening WebSocket in ${this.constructor.reopenDelay}ms`)\n setTimeout(this.open, this.constructor.reopenDelay)\n }\n } else {\n return this.open()\n }\n }\n\n getProtocol() {\n if (this.webSocket) {\n return this.webSocket.protocol\n }\n }\n\n isOpen() {\n return this.isState(\"open\")\n }\n\n isActive() {\n return this.isState(\"open\", \"connecting\")\n }\n\n // Private\n\n isProtocolSupported() {\n return indexOf.call(supportedProtocols, this.getProtocol()) >= 0\n }\n\n isState(...states) {\n return indexOf.call(states, this.getState()) >= 0\n }\n\n getState() {\n if (this.webSocket) {\n for (let state in adapters.WebSocket) {\n if (adapters.WebSocket[state] === this.webSocket.readyState) {\n return state.toLowerCase()\n }\n }\n }\n return null\n }\n\n installEventHandlers() {\n for (let eventName in this.events) {\n const handler = this.events[eventName].bind(this)\n this.webSocket[`on${eventName}`] = handler\n }\n }\n\n uninstallEventHandlers() {\n for (let eventName in this.events) {\n this.webSocket[`on${eventName}`] = function() {}\n }\n }\n\n}\n\nConnection.reopenDelay = 500\n\nConnection.prototype.events = {\n message(event) {\n if (!this.isProtocolSupported()) { return }\n const {identifier, message, reason, reconnect, type} = JSON.parse(event.data)\n switch (type) {\n case message_types.welcome:\n this.monitor.recordConnect()\n return this.subscriptions.reload()\n case message_types.disconnect:\n logger.log(`Disconnecting. Reason: ${reason}`)\n return this.close({allowReconnect: reconnect})\n case message_types.ping:\n return this.monitor.recordPing()\n case message_types.confirmation:\n this.subscriptions.confirmSubscription(identifier)\n return this.subscriptions.notify(identifier, \"connected\")\n case message_types.rejection:\n return this.subscriptions.reject(identifier)\n default:\n return this.subscriptions.notify(identifier, \"received\", message)\n }\n },\n\n open() {\n logger.log(`WebSocket onopen event, using '${this.getProtocol()}' subprotocol`)\n this.disconnected = false\n if (!this.isProtocolSupported()) {\n logger.log(\"Protocol is unsupported. Stopping monitor and disconnecting.\")\n return this.close({allowReconnect: false})\n }\n },\n\n close(event) {\n logger.log(\"WebSocket onclose event\")\n if (this.disconnected) { return }\n this.disconnected = true\n this.monitor.recordDisconnect()\n return this.subscriptions.notifyAll(\"disconnected\", {willAttemptReconnect: this.monitor.isRunning()})\n },\n\n error() {\n logger.log(\"WebSocket onerror event\")\n }\n}\n\nexport default Connection\n", "// A new subscription is created through the ActionCable.Subscriptions instance available on the consumer.\n// It provides a number of callbacks and a method for calling remote procedure calls on the corresponding\n// Channel instance on the server side.\n//\n// An example demonstrates the basic functionality:\n//\n// App.appearance = App.cable.subscriptions.create(\"AppearanceChannel\", {\n// connected() {\n// // Called once the subscription has been successfully completed\n// },\n//\n// disconnected({ willAttemptReconnect: boolean }) {\n// // Called when the client has disconnected with the server.\n// // The object will have an `willAttemptReconnect` property which\n// // says whether the client has the intention of attempting\n// // to reconnect.\n// },\n//\n// appear() {\n// this.perform('appear', {appearing_on: this.appearingOn()})\n// },\n//\n// away() {\n// this.perform('away')\n// },\n//\n// appearingOn() {\n// $('main').data('appearing-on')\n// }\n// })\n//\n// The methods #appear and #away forward their intent to the remote AppearanceChannel instance on the server\n// by calling the `perform` method with the first parameter being the action (which maps to AppearanceChannel#appear/away).\n// The second parameter is a hash that'll get JSON encoded and made available on the server in the data parameter.\n//\n// This is how the server component would look:\n//\n// class AppearanceChannel < ApplicationActionCable::Channel\n// def subscribed\n// current_user.appear\n// end\n//\n// def unsubscribed\n// current_user.disappear\n// end\n//\n// def appear(data)\n// current_user.appear on: data['appearing_on']\n// end\n//\n// def away\n// current_user.away\n// end\n// end\n//\n// The \"AppearanceChannel\" name is automatically mapped between the client-side subscription creation and the server-side Ruby class name.\n// The AppearanceChannel#appear/away public methods are exposed automatically to client-side invocation through the perform method.\n\nconst extend = function(object, properties) {\n if (properties != null) {\n for (let key in properties) {\n const value = properties[key]\n object[key] = value\n }\n }\n return object\n}\n\nexport default class Subscription {\n constructor(consumer, params = {}, mixin) {\n this.consumer = consumer\n this.identifier = JSON.stringify(params)\n extend(this, mixin)\n }\n\n // Perform a channel action with the optional data passed as an attribute\n perform(action, data = {}) {\n data.action = action\n return this.send(data)\n }\n\n send(data) {\n return this.consumer.send({command: \"message\", identifier: this.identifier, data: JSON.stringify(data)})\n }\n\n unsubscribe() {\n return this.consumer.subscriptions.remove(this)\n }\n}\n", "import logger from \"./logger\"\n\n// Responsible for ensuring channel subscribe command is confirmed, retrying until confirmation is received.\n// Internal class, not intended for direct user manipulation.\n\nclass SubscriptionGuarantor {\n constructor(subscriptions) {\n this.subscriptions = subscriptions\n this.pendingSubscriptions = []\n }\n\n guarantee(subscription) {\n if(this.pendingSubscriptions.indexOf(subscription) == -1){ \n logger.log(`SubscriptionGuarantor guaranteeing ${subscription.identifier}`)\n this.pendingSubscriptions.push(subscription) \n }\n else {\n logger.log(`SubscriptionGuarantor already guaranteeing ${subscription.identifier}`)\n }\n this.startGuaranteeing()\n }\n\n forget(subscription) {\n logger.log(`SubscriptionGuarantor forgetting ${subscription.identifier}`)\n this.pendingSubscriptions = (this.pendingSubscriptions.filter((s) => s !== subscription))\n }\n\n startGuaranteeing() {\n this.stopGuaranteeing()\n this.retrySubscribing()\n }\n \n stopGuaranteeing() {\n clearTimeout(this.retryTimeout)\n }\n\n retrySubscribing() {\n this.retryTimeout = setTimeout(() => {\n if (this.subscriptions && typeof(this.subscriptions.subscribe) === \"function\") {\n this.pendingSubscriptions.map((subscription) => {\n logger.log(`SubscriptionGuarantor resubscribing ${subscription.identifier}`)\n this.subscriptions.subscribe(subscription)\n })\n }\n }\n , 500)\n }\n}\n\nexport default SubscriptionGuarantor", "import Subscription from \"./subscription\"\nimport SubscriptionGuarantor from \"./subscription_guarantor\"\nimport logger from \"./logger\"\n\n// Collection class for creating (and internally managing) channel subscriptions.\n// The only method intended to be triggered by the user is ActionCable.Subscriptions#create,\n// and it should be called through the consumer like so:\n//\n// App = {}\n// App.cable = ActionCable.createConsumer(\"ws://example.com/accounts/1\")\n// App.appearance = App.cable.subscriptions.create(\"AppearanceChannel\")\n//\n// For more details on how you'd configure an actual channel subscription, see ActionCable.Subscription.\n\nexport default class Subscriptions {\n constructor(consumer) {\n this.consumer = consumer\n this.guarantor = new SubscriptionGuarantor(this)\n this.subscriptions = []\n }\n\n create(channelName, mixin) {\n const channel = channelName\n const params = typeof channel === \"object\" ? channel : {channel}\n const subscription = new Subscription(this.consumer, params, mixin)\n return this.add(subscription)\n }\n\n // Private\n\n add(subscription) {\n this.subscriptions.push(subscription)\n this.consumer.ensureActiveConnection()\n this.notify(subscription, \"initialized\")\n this.subscribe(subscription)\n return subscription\n }\n\n remove(subscription) {\n this.forget(subscription)\n if (!this.findAll(subscription.identifier).length) {\n this.sendCommand(subscription, \"unsubscribe\")\n }\n return subscription\n }\n\n reject(identifier) {\n return this.findAll(identifier).map((subscription) => {\n this.forget(subscription)\n this.notify(subscription, \"rejected\")\n return subscription\n })\n }\n\n forget(subscription) {\n this.guarantor.forget(subscription)\n this.subscriptions = (this.subscriptions.filter((s) => s !== subscription))\n return subscription\n }\n\n findAll(identifier) {\n return this.subscriptions.filter((s) => s.identifier === identifier)\n }\n\n reload() {\n return this.subscriptions.map((subscription) =>\n this.subscribe(subscription))\n }\n\n notifyAll(callbackName, ...args) {\n return this.subscriptions.map((subscription) =>\n this.notify(subscription, callbackName, ...args))\n }\n\n notify(subscription, callbackName, ...args) {\n let subscriptions\n if (typeof subscription === \"string\") {\n subscriptions = this.findAll(subscription)\n } else {\n subscriptions = [subscription]\n }\n\n return subscriptions.map((subscription) =>\n (typeof subscription[callbackName] === \"function\" ? subscription[callbackName](...args) : undefined))\n }\n\n subscribe(subscription) {\n if (this.sendCommand(subscription, \"subscribe\")) {\n this.guarantor.guarantee(subscription)\n }\n }\n\n confirmSubscription(identifier) {\n logger.log(`Subscription confirmed ${identifier}`)\n this.findAll(identifier).map((subscription) =>\n this.guarantor.forget(subscription))\n }\n\n sendCommand(subscription, command) {\n const {identifier} = subscription\n return this.consumer.send({command, identifier})\n }\n}\n", "import Connection from \"./connection\"\nimport Subscriptions from \"./subscriptions\"\n\n// The ActionCable.Consumer establishes the connection to a server-side Ruby Connection object. Once established,\n// the ActionCable.ConnectionMonitor will ensure that its properly maintained through heartbeats and checking for stale updates.\n// The Consumer instance is also the gateway to establishing subscriptions to desired channels through the #createSubscription\n// method.\n//\n// The following example shows how this can be set up:\n//\n// App = {}\n// App.cable = ActionCable.createConsumer(\"ws://example.com/accounts/1\")\n// App.appearance = App.cable.subscriptions.create(\"AppearanceChannel\")\n//\n// For more details on how you'd configure an actual channel subscription, see ActionCable.Subscription.\n//\n// When a consumer is created, it automatically connects with the server.\n//\n// To disconnect from the server, call\n//\n// App.cable.disconnect()\n//\n// and to restart the connection:\n//\n// App.cable.connect()\n//\n// Any channel subscriptions which existed prior to disconnecting will\n// automatically resubscribe.\n\nexport default class Consumer {\n constructor(url) {\n this._url = url\n this.subscriptions = new Subscriptions(this)\n this.connection = new Connection(this)\n }\n\n get url() {\n return createWebSocketURL(this._url)\n }\n\n send(data) {\n return this.connection.send(data)\n }\n\n connect() {\n return this.connection.open()\n }\n\n disconnect() {\n return this.connection.close({allowReconnect: false})\n }\n\n ensureActiveConnection() {\n if (!this.connection.isActive()) {\n return this.connection.open()\n }\n }\n}\n\nexport function createWebSocketURL(url) {\n if (typeof url === \"function\") {\n url = url()\n }\n\n if (url && !/^wss?:/i.test(url)) {\n const a = document.createElement(\"a\")\n a.href = url\n // Fix populating Location properties in IE. Otherwise, protocol will be blank.\n a.href = a.href\n a.protocol = a.protocol.replace(\"http\", \"ws\")\n return a.href\n } else {\n return url\n }\n}\n", "import Connection from \"./connection\"\nimport ConnectionMonitor from \"./connection_monitor\"\nimport Consumer, { createWebSocketURL } from \"./consumer\"\nimport INTERNAL from \"./internal\"\nimport Subscription from \"./subscription\"\nimport Subscriptions from \"./subscriptions\"\nimport SubscriptionGuarantor from \"./subscription_guarantor\"\nimport adapters from \"./adapters\"\nimport logger from \"./logger\"\n\nexport {\n Connection,\n ConnectionMonitor,\n Consumer,\n INTERNAL,\n Subscription,\n Subscriptions,\n SubscriptionGuarantor,\n adapters,\n createWebSocketURL,\n logger,\n}\n\nexport function createConsumer(url = getConfig(\"url\") || INTERNAL.default_mount_path) {\n return new Consumer(url)\n}\n\nexport function getConfig(name) {\n const element = document.head.querySelector(`meta[name='action-cable-${name}']`)\n if (element) {\n return element.getAttribute(\"content\")\n }\n}\n", "//! moment.js\n//! version : 2.29.4\n//! authors : Tim Wood, Iskren Chernev, Moment.js contributors\n//! license : MIT\n//! momentjs.com\n\n;(function (global, factory) {\n typeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory() :\n typeof define === 'function' && define.amd ? define(factory) :\n global.moment = factory()\n}(this, (function () { 'use strict';\n\n var hookCallback;\n\n function hooks() {\n return hookCallback.apply(null, arguments);\n }\n\n // This is done to register the method called with moment()\n // without creating circular dependencies.\n function setHookCallback(callback) {\n hookCallback = callback;\n }\n\n function isArray(input) {\n return (\n input instanceof Array ||\n Object.prototype.toString.call(input) === '[object Array]'\n );\n }\n\n function isObject(input) {\n // IE8 will treat undefined and null as object if it wasn't for\n // input != null\n return (\n input != null &&\n Object.prototype.toString.call(input) === '[object Object]'\n );\n }\n\n function hasOwnProp(a, b) {\n return Object.prototype.hasOwnProperty.call(a, b);\n }\n\n function isObjectEmpty(obj) {\n if (Object.getOwnPropertyNames) {\n return Object.getOwnPropertyNames(obj).length === 0;\n } else {\n var k;\n for (k in obj) {\n if (hasOwnProp(obj, k)) {\n return false;\n }\n }\n return true;\n }\n }\n\n function isUndefined(input) {\n return input === void 0;\n }\n\n function isNumber(input) {\n return (\n typeof input === 'number' ||\n Object.prototype.toString.call(input) === '[object Number]'\n );\n }\n\n function isDate(input) {\n return (\n input instanceof Date ||\n Object.prototype.toString.call(input) === '[object Date]'\n );\n }\n\n function map(arr, fn) {\n var res = [],\n i,\n arrLen = arr.length;\n for (i = 0; i < arrLen; ++i) {\n res.push(fn(arr[i], i));\n }\n return res;\n }\n\n function extend(a, b) {\n for (var i in b) {\n if (hasOwnProp(b, i)) {\n a[i] = b[i];\n }\n }\n\n if (hasOwnProp(b, 'toString')) {\n a.toString = b.toString;\n }\n\n if (hasOwnProp(b, 'valueOf')) {\n a.valueOf = b.valueOf;\n }\n\n return a;\n }\n\n function createUTC(input, format, locale, strict) {\n return createLocalOrUTC(input, format, locale, strict, true).utc();\n }\n\n function defaultParsingFlags() {\n // We need to deep clone this object.\n return {\n empty: false,\n unusedTokens: [],\n unusedInput: [],\n overflow: -2,\n charsLeftOver: 0,\n nullInput: false,\n invalidEra: null,\n invalidMonth: null,\n invalidFormat: false,\n userInvalidated: false,\n iso: false,\n parsedDateParts: [],\n era: null,\n meridiem: null,\n rfc2822: false,\n weekdayMismatch: false,\n };\n }\n\n function getParsingFlags(m) {\n if (m._pf == null) {\n m._pf = defaultParsingFlags();\n }\n return m._pf;\n }\n\n var some;\n if (Array.prototype.some) {\n some = Array.prototype.some;\n } else {\n some = function (fun) {\n var t = Object(this),\n len = t.length >>> 0,\n i;\n\n for (i = 0; i < len; i++) {\n if (i in t && fun.call(this, t[i], i, t)) {\n return true;\n }\n }\n\n return false;\n };\n }\n\n function isValid(m) {\n if (m._isValid == null) {\n var flags = getParsingFlags(m),\n parsedParts = some.call(flags.parsedDateParts, function (i) {\n return i != null;\n }),\n isNowValid =\n !isNaN(m._d.getTime()) &&\n flags.overflow < 0 &&\n !flags.empty &&\n !flags.invalidEra &&\n !flags.invalidMonth &&\n !flags.invalidWeekday &&\n !flags.weekdayMismatch &&\n !flags.nullInput &&\n !flags.invalidFormat &&\n !flags.userInvalidated &&\n (!flags.meridiem || (flags.meridiem && parsedParts));\n\n if (m._strict) {\n isNowValid =\n isNowValid &&\n flags.charsLeftOver === 0 &&\n flags.unusedTokens.length === 0 &&\n flags.bigHour === undefined;\n }\n\n if (Object.isFrozen == null || !Object.isFrozen(m)) {\n m._isValid = isNowValid;\n } else {\n return isNowValid;\n }\n }\n return m._isValid;\n }\n\n function createInvalid(flags) {\n var m = createUTC(NaN);\n if (flags != null) {\n extend(getParsingFlags(m), flags);\n } else {\n getParsingFlags(m).userInvalidated = true;\n }\n\n return m;\n }\n\n // Plugins that add properties should also add the key here (null value),\n // so we can properly clone ourselves.\n var momentProperties = (hooks.momentProperties = []),\n updateInProgress = false;\n\n function copyConfig(to, from) {\n var i,\n prop,\n val,\n momentPropertiesLen = momentProperties.length;\n\n if (!isUndefined(from._isAMomentObject)) {\n to._isAMomentObject = from._isAMomentObject;\n }\n if (!isUndefined(from._i)) {\n to._i = from._i;\n }\n if (!isUndefined(from._f)) {\n to._f = from._f;\n }\n if (!isUndefined(from._l)) {\n to._l = from._l;\n }\n if (!isUndefined(from._strict)) {\n to._strict = from._strict;\n }\n if (!isUndefined(from._tzm)) {\n to._tzm = from._tzm;\n }\n if (!isUndefined(from._isUTC)) {\n to._isUTC = from._isUTC;\n }\n if (!isUndefined(from._offset)) {\n to._offset = from._offset;\n }\n if (!isUndefined(from._pf)) {\n to._pf = getParsingFlags(from);\n }\n if (!isUndefined(from._locale)) {\n to._locale = from._locale;\n }\n\n if (momentPropertiesLen > 0) {\n for (i = 0; i < momentPropertiesLen; i++) {\n prop = momentProperties[i];\n val = from[prop];\n if (!isUndefined(val)) {\n to[prop] = val;\n }\n }\n }\n\n return to;\n }\n\n // Moment prototype object\n function Moment(config) {\n copyConfig(this, config);\n this._d = new Date(config._d != null ? config._d.getTime() : NaN);\n if (!this.isValid()) {\n this._d = new Date(NaN);\n }\n // Prevent infinite loop in case updateOffset creates new moment\n // objects.\n if (updateInProgress === false) {\n updateInProgress = true;\n hooks.updateOffset(this);\n updateInProgress = false;\n }\n }\n\n function isMoment(obj) {\n return (\n obj instanceof Moment || (obj != null && obj._isAMomentObject != null)\n );\n }\n\n function warn(msg) {\n if (\n hooks.suppressDeprecationWarnings === false &&\n typeof console !== 'undefined' &&\n console.warn\n ) {\n console.warn('Deprecation warning: ' + msg);\n }\n }\n\n function deprecate(msg, fn) {\n var firstTime = true;\n\n return extend(function () {\n if (hooks.deprecationHandler != null) {\n hooks.deprecationHandler(null, msg);\n }\n if (firstTime) {\n var args = [],\n arg,\n i,\n key,\n argLen = arguments.length;\n for (i = 0; i < argLen; i++) {\n arg = '';\n if (typeof arguments[i] === 'object') {\n arg += '\\n[' + i + '] ';\n for (key in arguments[0]) {\n if (hasOwnProp(arguments[0], key)) {\n arg += key + ': ' + arguments[0][key] + ', ';\n }\n }\n arg = arg.slice(0, -2); // Remove trailing comma and space\n } else {\n arg = arguments[i];\n }\n args.push(arg);\n }\n warn(\n msg +\n '\\nArguments: ' +\n Array.prototype.slice.call(args).join('') +\n '\\n' +\n new Error().stack\n );\n firstTime = false;\n }\n return fn.apply(this, arguments);\n }, fn);\n }\n\n var deprecations = {};\n\n function deprecateSimple(name, msg) {\n if (hooks.deprecationHandler != null) {\n hooks.deprecationHandler(name, msg);\n }\n if (!deprecations[name]) {\n warn(msg);\n deprecations[name] = true;\n }\n }\n\n hooks.suppressDeprecationWarnings = false;\n hooks.deprecationHandler = null;\n\n function isFunction(input) {\n return (\n (typeof Function !== 'undefined' && input instanceof Function) ||\n Object.prototype.toString.call(input) === '[object Function]'\n );\n }\n\n function set(config) {\n var prop, i;\n for (i in config) {\n if (hasOwnProp(config, i)) {\n prop = config[i];\n if (isFunction(prop)) {\n this[i] = prop;\n } else {\n this['_' + i] = prop;\n }\n }\n }\n this._config = config;\n // Lenient ordinal parsing accepts just a number in addition to\n // number + (possibly) stuff coming from _dayOfMonthOrdinalParse.\n // TODO: Remove \"ordinalParse\" fallback in next major release.\n this._dayOfMonthOrdinalParseLenient = new RegExp(\n (this._dayOfMonthOrdinalParse.source || this._ordinalParse.source) +\n '|' +\n /\\d{1,2}/.source\n );\n }\n\n function mergeConfigs(parentConfig, childConfig) {\n var res = extend({}, parentConfig),\n prop;\n for (prop in childConfig) {\n if (hasOwnProp(childConfig, prop)) {\n if (isObject(parentConfig[prop]) && isObject(childConfig[prop])) {\n res[prop] = {};\n extend(res[prop], parentConfig[prop]);\n extend(res[prop], childConfig[prop]);\n } else if (childConfig[prop] != null) {\n res[prop] = childConfig[prop];\n } else {\n delete res[prop];\n }\n }\n }\n for (prop in parentConfig) {\n if (\n hasOwnProp(parentConfig, prop) &&\n !hasOwnProp(childConfig, prop) &&\n isObject(parentConfig[prop])\n ) {\n // make sure changes to properties don't modify parent config\n res[prop] = extend({}, res[prop]);\n }\n }\n return res;\n }\n\n function Locale(config) {\n if (config != null) {\n this.set(config);\n }\n }\n\n var keys;\n\n if (Object.keys) {\n keys = Object.keys;\n } else {\n keys = function (obj) {\n var i,\n res = [];\n for (i in obj) {\n if (hasOwnProp(obj, i)) {\n res.push(i);\n }\n }\n return res;\n };\n }\n\n var defaultCalendar = {\n sameDay: '[Today at] LT',\n nextDay: '[Tomorrow at] LT',\n nextWeek: 'dddd [at] LT',\n lastDay: '[Yesterday at] LT',\n lastWeek: '[Last] dddd [at] LT',\n sameElse: 'L',\n };\n\n function calendar(key, mom, now) {\n var output = this._calendar[key] || this._calendar['sameElse'];\n return isFunction(output) ? output.call(mom, now) : output;\n }\n\n function zeroFill(number, targetLength, forceSign) {\n var absNumber = '' + Math.abs(number),\n zerosToFill = targetLength - absNumber.length,\n sign = number >= 0;\n return (\n (sign ? (forceSign ? '+' : '') : '-') +\n Math.pow(10, Math.max(0, zerosToFill)).toString().substr(1) +\n absNumber\n );\n }\n\n var formattingTokens =\n /(\\[[^\\[]*\\])|(\\\\)?([Hh]mm(ss)?|Mo|MM?M?M?|Do|DDDo|DD?D?D?|ddd?d?|do?|w[o|w]?|W[o|W]?|Qo?|N{1,5}|YYYYYY|YYYYY|YYYY|YY|y{2,4}|yo?|gg(ggg?)?|GG(GGG?)?|e|E|a|A|hh?|HH?|kk?|mm?|ss?|S{1,9}|x|X|zz?|ZZ?|.)/g,\n localFormattingTokens = /(\\[[^\\[]*\\])|(\\\\)?(LTS|LT|LL?L?L?|l{1,4})/g,\n formatFunctions = {},\n formatTokenFunctions = {};\n\n // token: 'M'\n // padded: ['MM', 2]\n // ordinal: 'Mo'\n // callback: function () { this.month() + 1 }\n function addFormatToken(token, padded, ordinal, callback) {\n var func = callback;\n if (typeof callback === 'string') {\n func = function () {\n return this[callback]();\n };\n }\n if (token) {\n formatTokenFunctions[token] = func;\n }\n if (padded) {\n formatTokenFunctions[padded[0]] = function () {\n return zeroFill(func.apply(this, arguments), padded[1], padded[2]);\n };\n }\n if (ordinal) {\n formatTokenFunctions[ordinal] = function () {\n return this.localeData().ordinal(\n func.apply(this, arguments),\n token\n );\n };\n }\n }\n\n function removeFormattingTokens(input) {\n if (input.match(/\\[[\\s\\S]/)) {\n return input.replace(/^\\[|\\]$/g, '');\n }\n return input.replace(/\\\\/g, '');\n }\n\n function makeFormatFunction(format) {\n var array = format.match(formattingTokens),\n i,\n length;\n\n for (i = 0, length = array.length; i < length; i++) {\n if (formatTokenFunctions[array[i]]) {\n array[i] = formatTokenFunctions[array[i]];\n } else {\n array[i] = removeFormattingTokens(array[i]);\n }\n }\n\n return function (mom) {\n var output = '',\n i;\n for (i = 0; i < length; i++) {\n output += isFunction(array[i])\n ? array[i].call(mom, format)\n : array[i];\n }\n return output;\n };\n }\n\n // format date using native date object\n function formatMoment(m, format) {\n if (!m.isValid()) {\n return m.localeData().invalidDate();\n }\n\n format = expandFormat(format, m.localeData());\n formatFunctions[format] =\n formatFunctions[format] || makeFormatFunction(format);\n\n return formatFunctions[format](m);\n }\n\n function expandFormat(format, locale) {\n var i = 5;\n\n function replaceLongDateFormatTokens(input) {\n return locale.longDateFormat(input) || input;\n }\n\n localFormattingTokens.lastIndex = 0;\n while (i >= 0 && localFormattingTokens.test(format)) {\n format = format.replace(\n localFormattingTokens,\n replaceLongDateFormatTokens\n );\n localFormattingTokens.lastIndex = 0;\n i -= 1;\n }\n\n return format;\n }\n\n var defaultLongDateFormat = {\n LTS: 'h:mm:ss A',\n LT: 'h:mm A',\n L: 'MM/DD/YYYY',\n LL: 'MMMM D, YYYY',\n LLL: 'MMMM D, YYYY h:mm A',\n LLLL: 'dddd, MMMM D, YYYY h:mm A',\n };\n\n function longDateFormat(key) {\n var format = this._longDateFormat[key],\n formatUpper = this._longDateFormat[key.toUpperCase()];\n\n if (format || !formatUpper) {\n return format;\n }\n\n this._longDateFormat[key] = formatUpper\n .match(formattingTokens)\n .map(function (tok) {\n if (\n tok === 'MMMM' ||\n tok === 'MM' ||\n tok === 'DD' ||\n tok === 'dddd'\n ) {\n return tok.slice(1);\n }\n return tok;\n })\n .join('');\n\n return this._longDateFormat[key];\n }\n\n var defaultInvalidDate = 'Invalid date';\n\n function invalidDate() {\n return this._invalidDate;\n }\n\n var defaultOrdinal = '%d',\n defaultDayOfMonthOrdinalParse = /\\d{1,2}/;\n\n function ordinal(number) {\n return this._ordinal.replace('%d', number);\n }\n\n var defaultRelativeTime = {\n future: 'in %s',\n past: '%s ago',\n s: 'a few seconds',\n ss: '%d seconds',\n m: 'a minute',\n mm: '%d minutes',\n h: 'an hour',\n hh: '%d hours',\n d: 'a day',\n dd: '%d days',\n w: 'a week',\n ww: '%d weeks',\n M: 'a month',\n MM: '%d months',\n y: 'a year',\n yy: '%d years',\n };\n\n function relativeTime(number, withoutSuffix, string, isFuture) {\n var output = this._relativeTime[string];\n return isFunction(output)\n ? output(number, withoutSuffix, string, isFuture)\n : output.replace(/%d/i, number);\n }\n\n function pastFuture(diff, output) {\n var format = this._relativeTime[diff > 0 ? 'future' : 'past'];\n return isFunction(format) ? format(output) : format.replace(/%s/i, output);\n }\n\n var aliases = {};\n\n function addUnitAlias(unit, shorthand) {\n var lowerCase = unit.toLowerCase();\n aliases[lowerCase] = aliases[lowerCase + 's'] = aliases[shorthand] = unit;\n }\n\n function normalizeUnits(units) {\n return typeof units === 'string'\n ? aliases[units] || aliases[units.toLowerCase()]\n : undefined;\n }\n\n function normalizeObjectUnits(inputObject) {\n var normalizedInput = {},\n normalizedProp,\n prop;\n\n for (prop in inputObject) {\n if (hasOwnProp(inputObject, prop)) {\n normalizedProp = normalizeUnits(prop);\n if (normalizedProp) {\n normalizedInput[normalizedProp] = inputObject[prop];\n }\n }\n }\n\n return normalizedInput;\n }\n\n var priorities = {};\n\n function addUnitPriority(unit, priority) {\n priorities[unit] = priority;\n }\n\n function getPrioritizedUnits(unitsObj) {\n var units = [],\n u;\n for (u in unitsObj) {\n if (hasOwnProp(unitsObj, u)) {\n units.push({ unit: u, priority: priorities[u] });\n }\n }\n units.sort(function (a, b) {\n return a.priority - b.priority;\n });\n return units;\n }\n\n function isLeapYear(year) {\n return (year % 4 === 0 && year % 100 !== 0) || year % 400 === 0;\n }\n\n function absFloor(number) {\n if (number < 0) {\n // -0 -> 0\n return Math.ceil(number) || 0;\n } else {\n return Math.floor(number);\n }\n }\n\n function toInt(argumentForCoercion) {\n var coercedNumber = +argumentForCoercion,\n value = 0;\n\n if (coercedNumber !== 0 && isFinite(coercedNumber)) {\n value = absFloor(coercedNumber);\n }\n\n return value;\n }\n\n function makeGetSet(unit, keepTime) {\n return function (value) {\n if (value != null) {\n set$1(this, unit, value);\n hooks.updateOffset(this, keepTime);\n return this;\n } else {\n return get(this, unit);\n }\n };\n }\n\n function get(mom, unit) {\n return mom.isValid()\n ? mom._d['get' + (mom._isUTC ? 'UTC' : '') + unit]()\n : NaN;\n }\n\n function set$1(mom, unit, value) {\n if (mom.isValid() && !isNaN(value)) {\n if (\n unit === 'FullYear' &&\n isLeapYear(mom.year()) &&\n mom.month() === 1 &&\n mom.date() === 29\n ) {\n value = toInt(value);\n mom._d['set' + (mom._isUTC ? 'UTC' : '') + unit](\n value,\n mom.month(),\n daysInMonth(value, mom.month())\n );\n } else {\n mom._d['set' + (mom._isUTC ? 'UTC' : '') + unit](value);\n }\n }\n }\n\n // MOMENTS\n\n function stringGet(units) {\n units = normalizeUnits(units);\n if (isFunction(this[units])) {\n return this[units]();\n }\n return this;\n }\n\n function stringSet(units, value) {\n if (typeof units === 'object') {\n units = normalizeObjectUnits(units);\n var prioritized = getPrioritizedUnits(units),\n i,\n prioritizedLen = prioritized.length;\n for (i = 0; i < prioritizedLen; i++) {\n this[prioritized[i].unit](units[prioritized[i].unit]);\n }\n } else {\n units = normalizeUnits(units);\n if (isFunction(this[units])) {\n return this[units](value);\n }\n }\n return this;\n }\n\n var match1 = /\\d/, // 0 - 9\n match2 = /\\d\\d/, // 00 - 99\n match3 = /\\d{3}/, // 000 - 999\n match4 = /\\d{4}/, // 0000 - 9999\n match6 = /[+-]?\\d{6}/, // -999999 - 999999\n match1to2 = /\\d\\d?/, // 0 - 99\n match3to4 = /\\d\\d\\d\\d?/, // 999 - 9999\n match5to6 = /\\d\\d\\d\\d\\d\\d?/, // 99999 - 999999\n match1to3 = /\\d{1,3}/, // 0 - 999\n match1to4 = /\\d{1,4}/, // 0 - 9999\n match1to6 = /[+-]?\\d{1,6}/, // -999999 - 999999\n matchUnsigned = /\\d+/, // 0 - inf\n matchSigned = /[+-]?\\d+/, // -inf - inf\n matchOffset = /Z|[+-]\\d\\d:?\\d\\d/gi, // +00:00 -00:00 +0000 -0000 or Z\n matchShortOffset = /Z|[+-]\\d\\d(?::?\\d\\d)?/gi, // +00 -00 +00:00 -00:00 +0000 -0000 or Z\n matchTimestamp = /[+-]?\\d+(\\.\\d{1,3})?/, // 123456789 123456789.123\n // any word (or two) characters or numbers including two/three word month in arabic.\n // includes scottish gaelic two word and hyphenated months\n matchWord =\n /[0-9]{0,256}['a-z\\u00A0-\\u05FF\\u0700-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFF07\\uFF10-\\uFFEF]{1,256}|[\\u0600-\\u06FF\\/]{1,256}(\\s*?[\\u0600-\\u06FF]{1,256}){1,2}/i,\n regexes;\n\n regexes = {};\n\n function addRegexToken(token, regex, strictRegex) {\n regexes[token] = isFunction(regex)\n ? regex\n : function (isStrict, localeData) {\n return isStrict && strictRegex ? strictRegex : regex;\n };\n }\n\n function getParseRegexForToken(token, config) {\n if (!hasOwnProp(regexes, token)) {\n return new RegExp(unescapeFormat(token));\n }\n\n return regexes[token](config._strict, config._locale);\n }\n\n // Code from http://stackoverflow.com/questions/3561493/is-there-a-regexp-escape-function-in-javascript\n function unescapeFormat(s) {\n return regexEscape(\n s\n .replace('\\\\', '')\n .replace(\n /\\\\(\\[)|\\\\(\\])|\\[([^\\]\\[]*)\\]|\\\\(.)/g,\n function (matched, p1, p2, p3, p4) {\n return p1 || p2 || p3 || p4;\n }\n )\n );\n }\n\n function regexEscape(s) {\n return s.replace(/[-\\/\\\\^$*+?.()|[\\]{}]/g, '\\\\$&');\n }\n\n var tokens = {};\n\n function addParseToken(token, callback) {\n var i,\n func = callback,\n tokenLen;\n if (typeof token === 'string') {\n token = [token];\n }\n if (isNumber(callback)) {\n func = function (input, array) {\n array[callback] = toInt(input);\n };\n }\n tokenLen = token.length;\n for (i = 0; i < tokenLen; i++) {\n tokens[token[i]] = func;\n }\n }\n\n function addWeekParseToken(token, callback) {\n addParseToken(token, function (input, array, config, token) {\n config._w = config._w || {};\n callback(input, config._w, config, token);\n });\n }\n\n function addTimeToArrayFromToken(token, input, config) {\n if (input != null && hasOwnProp(tokens, token)) {\n tokens[token](input, config._a, config, token);\n }\n }\n\n var YEAR = 0,\n MONTH = 1,\n DATE = 2,\n HOUR = 3,\n MINUTE = 4,\n SECOND = 5,\n MILLISECOND = 6,\n WEEK = 7,\n WEEKDAY = 8;\n\n function mod(n, x) {\n return ((n % x) + x) % x;\n }\n\n var indexOf;\n\n if (Array.prototype.indexOf) {\n indexOf = Array.prototype.indexOf;\n } else {\n indexOf = function (o) {\n // I know\n var i;\n for (i = 0; i < this.length; ++i) {\n if (this[i] === o) {\n return i;\n }\n }\n return -1;\n };\n }\n\n function daysInMonth(year, month) {\n if (isNaN(year) || isNaN(month)) {\n return NaN;\n }\n var modMonth = mod(month, 12);\n year += (month - modMonth) / 12;\n return modMonth === 1\n ? isLeapYear(year)\n ? 29\n : 28\n : 31 - ((modMonth % 7) % 2);\n }\n\n // FORMATTING\n\n addFormatToken('M', ['MM', 2], 'Mo', function () {\n return this.month() + 1;\n });\n\n addFormatToken('MMM', 0, 0, function (format) {\n return this.localeData().monthsShort(this, format);\n });\n\n addFormatToken('MMMM', 0, 0, function (format) {\n return this.localeData().months(this, format);\n });\n\n // ALIASES\n\n addUnitAlias('month', 'M');\n\n // PRIORITY\n\n addUnitPriority('month', 8);\n\n // PARSING\n\n addRegexToken('M', match1to2);\n addRegexToken('MM', match1to2, match2);\n addRegexToken('MMM', function (isStrict, locale) {\n return locale.monthsShortRegex(isStrict);\n });\n addRegexToken('MMMM', function (isStrict, locale) {\n return locale.monthsRegex(isStrict);\n });\n\n addParseToken(['M', 'MM'], function (input, array) {\n array[MONTH] = toInt(input) - 1;\n });\n\n addParseToken(['MMM', 'MMMM'], function (input, array, config, token) {\n var month = config._locale.monthsParse(input, token, config._strict);\n // if we didn't find a month name, mark the date as invalid.\n if (month != null) {\n array[MONTH] = month;\n } else {\n getParsingFlags(config).invalidMonth = input;\n }\n });\n\n // LOCALES\n\n var defaultLocaleMonths =\n 'January_February_March_April_May_June_July_August_September_October_November_December'.split(\n '_'\n ),\n defaultLocaleMonthsShort =\n 'Jan_Feb_Mar_Apr_May_Jun_Jul_Aug_Sep_Oct_Nov_Dec'.split('_'),\n MONTHS_IN_FORMAT = /D[oD]?(\\[[^\\[\\]]*\\]|\\s)+MMMM?/,\n defaultMonthsShortRegex = matchWord,\n defaultMonthsRegex = matchWord;\n\n function localeMonths(m, format) {\n if (!m) {\n return isArray(this._months)\n ? this._months\n : this._months['standalone'];\n }\n return isArray(this._months)\n ? this._months[m.month()]\n : this._months[\n (this._months.isFormat || MONTHS_IN_FORMAT).test(format)\n ? 'format'\n : 'standalone'\n ][m.month()];\n }\n\n function localeMonthsShort(m, format) {\n if (!m) {\n return isArray(this._monthsShort)\n ? this._monthsShort\n : this._monthsShort['standalone'];\n }\n return isArray(this._monthsShort)\n ? this._monthsShort[m.month()]\n : this._monthsShort[\n MONTHS_IN_FORMAT.test(format) ? 'format' : 'standalone'\n ][m.month()];\n }\n\n function handleStrictParse(monthName, format, strict) {\n var i,\n ii,\n mom,\n llc = monthName.toLocaleLowerCase();\n if (!this._monthsParse) {\n // this is not used\n this._monthsParse = [];\n this._longMonthsParse = [];\n this._shortMonthsParse = [];\n for (i = 0; i < 12; ++i) {\n mom = createUTC([2000, i]);\n this._shortMonthsParse[i] = this.monthsShort(\n mom,\n ''\n ).toLocaleLowerCase();\n this._longMonthsParse[i] = this.months(mom, '').toLocaleLowerCase();\n }\n }\n\n if (strict) {\n if (format === 'MMM') {\n ii = indexOf.call(this._shortMonthsParse, llc);\n return ii !== -1 ? ii : null;\n } else {\n ii = indexOf.call(this._longMonthsParse, llc);\n return ii !== -1 ? ii : null;\n }\n } else {\n if (format === 'MMM') {\n ii = indexOf.call(this._shortMonthsParse, llc);\n if (ii !== -1) {\n return ii;\n }\n ii = indexOf.call(this._longMonthsParse, llc);\n return ii !== -1 ? ii : null;\n } else {\n ii = indexOf.call(this._longMonthsParse, llc);\n if (ii !== -1) {\n return ii;\n }\n ii = indexOf.call(this._shortMonthsParse, llc);\n return ii !== -1 ? ii : null;\n }\n }\n }\n\n function localeMonthsParse(monthName, format, strict) {\n var i, mom, regex;\n\n if (this._monthsParseExact) {\n return handleStrictParse.call(this, monthName, format, strict);\n }\n\n if (!this._monthsParse) {\n this._monthsParse = [];\n this._longMonthsParse = [];\n this._shortMonthsParse = [];\n }\n\n // TODO: add sorting\n // Sorting makes sure if one month (or abbr) is a prefix of another\n // see sorting in computeMonthsParse\n for (i = 0; i < 12; i++) {\n // make the regex if we don't have it already\n mom = createUTC([2000, i]);\n if (strict && !this._longMonthsParse[i]) {\n this._longMonthsParse[i] = new RegExp(\n '^' + this.months(mom, '').replace('.', '') + '$',\n 'i'\n );\n this._shortMonthsParse[i] = new RegExp(\n '^' + this.monthsShort(mom, '').replace('.', '') + '$',\n 'i'\n );\n }\n if (!strict && !this._monthsParse[i]) {\n regex =\n '^' + this.months(mom, '') + '|^' + this.monthsShort(mom, '');\n this._monthsParse[i] = new RegExp(regex.replace('.', ''), 'i');\n }\n // test the regex\n if (\n strict &&\n format === 'MMMM' &&\n this._longMonthsParse[i].test(monthName)\n ) {\n return i;\n } else if (\n strict &&\n format === 'MMM' &&\n this._shortMonthsParse[i].test(monthName)\n ) {\n return i;\n } else if (!strict && this._monthsParse[i].test(monthName)) {\n return i;\n }\n }\n }\n\n // MOMENTS\n\n function setMonth(mom, value) {\n var dayOfMonth;\n\n if (!mom.isValid()) {\n // No op\n return mom;\n }\n\n if (typeof value === 'string') {\n if (/^\\d+$/.test(value)) {\n value = toInt(value);\n } else {\n value = mom.localeData().monthsParse(value);\n // TODO: Another silent failure?\n if (!isNumber(value)) {\n return mom;\n }\n }\n }\n\n dayOfMonth = Math.min(mom.date(), daysInMonth(mom.year(), value));\n mom._d['set' + (mom._isUTC ? 'UTC' : '') + 'Month'](value, dayOfMonth);\n return mom;\n }\n\n function getSetMonth(value) {\n if (value != null) {\n setMonth(this, value);\n hooks.updateOffset(this, true);\n return this;\n } else {\n return get(this, 'Month');\n }\n }\n\n function getDaysInMonth() {\n return daysInMonth(this.year(), this.month());\n }\n\n function monthsShortRegex(isStrict) {\n if (this._monthsParseExact) {\n if (!hasOwnProp(this, '_monthsRegex')) {\n computeMonthsParse.call(this);\n }\n if (isStrict) {\n return this._monthsShortStrictRegex;\n } else {\n return this._monthsShortRegex;\n }\n } else {\n if (!hasOwnProp(this, '_monthsShortRegex')) {\n this._monthsShortRegex = defaultMonthsShortRegex;\n }\n return this._monthsShortStrictRegex && isStrict\n ? this._monthsShortStrictRegex\n : this._monthsShortRegex;\n }\n }\n\n function monthsRegex(isStrict) {\n if (this._monthsParseExact) {\n if (!hasOwnProp(this, '_monthsRegex')) {\n computeMonthsParse.call(this);\n }\n if (isStrict) {\n return this._monthsStrictRegex;\n } else {\n return this._monthsRegex;\n }\n } else {\n if (!hasOwnProp(this, '_monthsRegex')) {\n this._monthsRegex = defaultMonthsRegex;\n }\n return this._monthsStrictRegex && isStrict\n ? this._monthsStrictRegex\n : this._monthsRegex;\n }\n }\n\n function computeMonthsParse() {\n function cmpLenRev(a, b) {\n return b.length - a.length;\n }\n\n var shortPieces = [],\n longPieces = [],\n mixedPieces = [],\n i,\n mom;\n for (i = 0; i < 12; i++) {\n // make the regex if we don't have it already\n mom = createUTC([2000, i]);\n shortPieces.push(this.monthsShort(mom, ''));\n longPieces.push(this.months(mom, ''));\n mixedPieces.push(this.months(mom, ''));\n mixedPieces.push(this.monthsShort(mom, ''));\n }\n // Sorting makes sure if one month (or abbr) is a prefix of another it\n // will match the longer piece.\n shortPieces.sort(cmpLenRev);\n longPieces.sort(cmpLenRev);\n mixedPieces.sort(cmpLenRev);\n for (i = 0; i < 12; i++) {\n shortPieces[i] = regexEscape(shortPieces[i]);\n longPieces[i] = regexEscape(longPieces[i]);\n }\n for (i = 0; i < 24; i++) {\n mixedPieces[i] = regexEscape(mixedPieces[i]);\n }\n\n this._monthsRegex = new RegExp('^(' + mixedPieces.join('|') + ')', 'i');\n this._monthsShortRegex = this._monthsRegex;\n this._monthsStrictRegex = new RegExp(\n '^(' + longPieces.join('|') + ')',\n 'i'\n );\n this._monthsShortStrictRegex = new RegExp(\n '^(' + shortPieces.join('|') + ')',\n 'i'\n );\n }\n\n // FORMATTING\n\n addFormatToken('Y', 0, 0, function () {\n var y = this.year();\n return y <= 9999 ? zeroFill(y, 4) : '+' + y;\n });\n\n addFormatToken(0, ['YY', 2], 0, function () {\n return this.year() % 100;\n });\n\n addFormatToken(0, ['YYYY', 4], 0, 'year');\n addFormatToken(0, ['YYYYY', 5], 0, 'year');\n addFormatToken(0, ['YYYYYY', 6, true], 0, 'year');\n\n // ALIASES\n\n addUnitAlias('year', 'y');\n\n // PRIORITIES\n\n addUnitPriority('year', 1);\n\n // PARSING\n\n addRegexToken('Y', matchSigned);\n addRegexToken('YY', match1to2, match2);\n addRegexToken('YYYY', match1to4, match4);\n addRegexToken('YYYYY', match1to6, match6);\n addRegexToken('YYYYYY', match1to6, match6);\n\n addParseToken(['YYYYY', 'YYYYYY'], YEAR);\n addParseToken('YYYY', function (input, array) {\n array[YEAR] =\n input.length === 2 ? hooks.parseTwoDigitYear(input) : toInt(input);\n });\n addParseToken('YY', function (input, array) {\n array[YEAR] = hooks.parseTwoDigitYear(input);\n });\n addParseToken('Y', function (input, array) {\n array[YEAR] = parseInt(input, 10);\n });\n\n // HELPERS\n\n function daysInYear(year) {\n return isLeapYear(year) ? 366 : 365;\n }\n\n // HOOKS\n\n hooks.parseTwoDigitYear = function (input) {\n return toInt(input) + (toInt(input) > 68 ? 1900 : 2000);\n };\n\n // MOMENTS\n\n var getSetYear = makeGetSet('FullYear', true);\n\n function getIsLeapYear() {\n return isLeapYear(this.year());\n }\n\n function createDate(y, m, d, h, M, s, ms) {\n // can't just apply() to create a date:\n // https://stackoverflow.com/q/181348\n var date;\n // the date constructor remaps years 0-99 to 1900-1999\n if (y < 100 && y >= 0) {\n // preserve leap years using a full 400 year cycle, then reset\n date = new Date(y + 400, m, d, h, M, s, ms);\n if (isFinite(date.getFullYear())) {\n date.setFullYear(y);\n }\n } else {\n date = new Date(y, m, d, h, M, s, ms);\n }\n\n return date;\n }\n\n function createUTCDate(y) {\n var date, args;\n // the Date.UTC function remaps years 0-99 to 1900-1999\n if (y < 100 && y >= 0) {\n args = Array.prototype.slice.call(arguments);\n // preserve leap years using a full 400 year cycle, then reset\n args[0] = y + 400;\n date = new Date(Date.UTC.apply(null, args));\n if (isFinite(date.getUTCFullYear())) {\n date.setUTCFullYear(y);\n }\n } else {\n date = new Date(Date.UTC.apply(null, arguments));\n }\n\n return date;\n }\n\n // start-of-first-week - start-of-year\n function firstWeekOffset(year, dow, doy) {\n var // first-week day -- which january is always in the first week (4 for iso, 1 for other)\n fwd = 7 + dow - doy,\n // first-week day local weekday -- which local weekday is fwd\n fwdlw = (7 + createUTCDate(year, 0, fwd).getUTCDay() - dow) % 7;\n\n return -fwdlw + fwd - 1;\n }\n\n // https://en.wikipedia.org/wiki/ISO_week_date#Calculating_a_date_given_the_year.2C_week_number_and_weekday\n function dayOfYearFromWeeks(year, week, weekday, dow, doy) {\n var localWeekday = (7 + weekday - dow) % 7,\n weekOffset = firstWeekOffset(year, dow, doy),\n dayOfYear = 1 + 7 * (week - 1) + localWeekday + weekOffset,\n resYear,\n resDayOfYear;\n\n if (dayOfYear <= 0) {\n resYear = year - 1;\n resDayOfYear = daysInYear(resYear) + dayOfYear;\n } else if (dayOfYear > daysInYear(year)) {\n resYear = year + 1;\n resDayOfYear = dayOfYear - daysInYear(year);\n } else {\n resYear = year;\n resDayOfYear = dayOfYear;\n }\n\n return {\n year: resYear,\n dayOfYear: resDayOfYear,\n };\n }\n\n function weekOfYear(mom, dow, doy) {\n var weekOffset = firstWeekOffset(mom.year(), dow, doy),\n week = Math.floor((mom.dayOfYear() - weekOffset - 1) / 7) + 1,\n resWeek,\n resYear;\n\n if (week < 1) {\n resYear = mom.year() - 1;\n resWeek = week + weeksInYear(resYear, dow, doy);\n } else if (week > weeksInYear(mom.year(), dow, doy)) {\n resWeek = week - weeksInYear(mom.year(), dow, doy);\n resYear = mom.year() + 1;\n } else {\n resYear = mom.year();\n resWeek = week;\n }\n\n return {\n week: resWeek,\n year: resYear,\n };\n }\n\n function weeksInYear(year, dow, doy) {\n var weekOffset = firstWeekOffset(year, dow, doy),\n weekOffsetNext = firstWeekOffset(year + 1, dow, doy);\n return (daysInYear(year) - weekOffset + weekOffsetNext) / 7;\n }\n\n // FORMATTING\n\n addFormatToken('w', ['ww', 2], 'wo', 'week');\n addFormatToken('W', ['WW', 2], 'Wo', 'isoWeek');\n\n // ALIASES\n\n addUnitAlias('week', 'w');\n addUnitAlias('isoWeek', 'W');\n\n // PRIORITIES\n\n addUnitPriority('week', 5);\n addUnitPriority('isoWeek', 5);\n\n // PARSING\n\n addRegexToken('w', match1to2);\n addRegexToken('ww', match1to2, match2);\n addRegexToken('W', match1to2);\n addRegexToken('WW', match1to2, match2);\n\n addWeekParseToken(\n ['w', 'ww', 'W', 'WW'],\n function (input, week, config, token) {\n week[token.substr(0, 1)] = toInt(input);\n }\n );\n\n // HELPERS\n\n // LOCALES\n\n function localeWeek(mom) {\n return weekOfYear(mom, this._week.dow, this._week.doy).week;\n }\n\n var defaultLocaleWeek = {\n dow: 0, // Sunday is the first day of the week.\n doy: 6, // The week that contains Jan 6th is the first week of the year.\n };\n\n function localeFirstDayOfWeek() {\n return this._week.dow;\n }\n\n function localeFirstDayOfYear() {\n return this._week.doy;\n }\n\n // MOMENTS\n\n function getSetWeek(input) {\n var week = this.localeData().week(this);\n return input == null ? week : this.add((input - week) * 7, 'd');\n }\n\n function getSetISOWeek(input) {\n var week = weekOfYear(this, 1, 4).week;\n return input == null ? week : this.add((input - week) * 7, 'd');\n }\n\n // FORMATTING\n\n addFormatToken('d', 0, 'do', 'day');\n\n addFormatToken('dd', 0, 0, function (format) {\n return this.localeData().weekdaysMin(this, format);\n });\n\n addFormatToken('ddd', 0, 0, function (format) {\n return this.localeData().weekdaysShort(this, format);\n });\n\n addFormatToken('dddd', 0, 0, function (format) {\n return this.localeData().weekdays(this, format);\n });\n\n addFormatToken('e', 0, 0, 'weekday');\n addFormatToken('E', 0, 0, 'isoWeekday');\n\n // ALIASES\n\n addUnitAlias('day', 'd');\n addUnitAlias('weekday', 'e');\n addUnitAlias('isoWeekday', 'E');\n\n // PRIORITY\n addUnitPriority('day', 11);\n addUnitPriority('weekday', 11);\n addUnitPriority('isoWeekday', 11);\n\n // PARSING\n\n addRegexToken('d', match1to2);\n addRegexToken('e', match1to2);\n addRegexToken('E', match1to2);\n addRegexToken('dd', function (isStrict, locale) {\n return locale.weekdaysMinRegex(isStrict);\n });\n addRegexToken('ddd', function (isStrict, locale) {\n return locale.weekdaysShortRegex(isStrict);\n });\n addRegexToken('dddd', function (isStrict, locale) {\n return locale.weekdaysRegex(isStrict);\n });\n\n addWeekParseToken(['dd', 'ddd', 'dddd'], function (input, week, config, token) {\n var weekday = config._locale.weekdaysParse(input, token, config._strict);\n // if we didn't get a weekday name, mark the date as invalid\n if (weekday != null) {\n week.d = weekday;\n } else {\n getParsingFlags(config).invalidWeekday = input;\n }\n });\n\n addWeekParseToken(['d', 'e', 'E'], function (input, week, config, token) {\n week[token] = toInt(input);\n });\n\n // HELPERS\n\n function parseWeekday(input, locale) {\n if (typeof input !== 'string') {\n return input;\n }\n\n if (!isNaN(input)) {\n return parseInt(input, 10);\n }\n\n input = locale.weekdaysParse(input);\n if (typeof input === 'number') {\n return input;\n }\n\n return null;\n }\n\n function parseIsoWeekday(input, locale) {\n if (typeof input === 'string') {\n return locale.weekdaysParse(input) % 7 || 7;\n }\n return isNaN(input) ? null : input;\n }\n\n // LOCALES\n function shiftWeekdays(ws, n) {\n return ws.slice(n, 7).concat(ws.slice(0, n));\n }\n\n var defaultLocaleWeekdays =\n 'Sunday_Monday_Tuesday_Wednesday_Thursday_Friday_Saturday'.split('_'),\n defaultLocaleWeekdaysShort = 'Sun_Mon_Tue_Wed_Thu_Fri_Sat'.split('_'),\n defaultLocaleWeekdaysMin = 'Su_Mo_Tu_We_Th_Fr_Sa'.split('_'),\n defaultWeekdaysRegex = matchWord,\n defaultWeekdaysShortRegex = matchWord,\n defaultWeekdaysMinRegex = matchWord;\n\n function localeWeekdays(m, format) {\n var weekdays = isArray(this._weekdays)\n ? this._weekdays\n : this._weekdays[\n m && m !== true && this._weekdays.isFormat.test(format)\n ? 'format'\n : 'standalone'\n ];\n return m === true\n ? shiftWeekdays(weekdays, this._week.dow)\n : m\n ? weekdays[m.day()]\n : weekdays;\n }\n\n function localeWeekdaysShort(m) {\n return m === true\n ? shiftWeekdays(this._weekdaysShort, this._week.dow)\n : m\n ? this._weekdaysShort[m.day()]\n : this._weekdaysShort;\n }\n\n function localeWeekdaysMin(m) {\n return m === true\n ? shiftWeekdays(this._weekdaysMin, this._week.dow)\n : m\n ? this._weekdaysMin[m.day()]\n : this._weekdaysMin;\n }\n\n function handleStrictParse$1(weekdayName, format, strict) {\n var i,\n ii,\n mom,\n llc = weekdayName.toLocaleLowerCase();\n if (!this._weekdaysParse) {\n this._weekdaysParse = [];\n this._shortWeekdaysParse = [];\n this._minWeekdaysParse = [];\n\n for (i = 0; i < 7; ++i) {\n mom = createUTC([2000, 1]).day(i);\n this._minWeekdaysParse[i] = this.weekdaysMin(\n mom,\n ''\n ).toLocaleLowerCase();\n this._shortWeekdaysParse[i] = this.weekdaysShort(\n mom,\n ''\n ).toLocaleLowerCase();\n this._weekdaysParse[i] = this.weekdays(mom, '').toLocaleLowerCase();\n }\n }\n\n if (strict) {\n if (format === 'dddd') {\n ii = indexOf.call(this._weekdaysParse, llc);\n return ii !== -1 ? ii : null;\n } else if (format === 'ddd') {\n ii = indexOf.call(this._shortWeekdaysParse, llc);\n return ii !== -1 ? ii : null;\n } else {\n ii = indexOf.call(this._minWeekdaysParse, llc);\n return ii !== -1 ? ii : null;\n }\n } else {\n if (format === 'dddd') {\n ii = indexOf.call(this._weekdaysParse, llc);\n if (ii !== -1) {\n return ii;\n }\n ii = indexOf.call(this._shortWeekdaysParse, llc);\n if (ii !== -1) {\n return ii;\n }\n ii = indexOf.call(this._minWeekdaysParse, llc);\n return ii !== -1 ? ii : null;\n } else if (format === 'ddd') {\n ii = indexOf.call(this._shortWeekdaysParse, llc);\n if (ii !== -1) {\n return ii;\n }\n ii = indexOf.call(this._weekdaysParse, llc);\n if (ii !== -1) {\n return ii;\n }\n ii = indexOf.call(this._minWeekdaysParse, llc);\n return ii !== -1 ? ii : null;\n } else {\n ii = indexOf.call(this._minWeekdaysParse, llc);\n if (ii !== -1) {\n return ii;\n }\n ii = indexOf.call(this._weekdaysParse, llc);\n if (ii !== -1) {\n return ii;\n }\n ii = indexOf.call(this._shortWeekdaysParse, llc);\n return ii !== -1 ? ii : null;\n }\n }\n }\n\n function localeWeekdaysParse(weekdayName, format, strict) {\n var i, mom, regex;\n\n if (this._weekdaysParseExact) {\n return handleStrictParse$1.call(this, weekdayName, format, strict);\n }\n\n if (!this._weekdaysParse) {\n this._weekdaysParse = [];\n this._minWeekdaysParse = [];\n this._shortWeekdaysParse = [];\n this._fullWeekdaysParse = [];\n }\n\n for (i = 0; i < 7; i++) {\n // make the regex if we don't have it already\n\n mom = createUTC([2000, 1]).day(i);\n if (strict && !this._fullWeekdaysParse[i]) {\n this._fullWeekdaysParse[i] = new RegExp(\n '^' + this.weekdays(mom, '').replace('.', '\\\\.?') + '$',\n 'i'\n );\n this._shortWeekdaysParse[i] = new RegExp(\n '^' + this.weekdaysShort(mom, '').replace('.', '\\\\.?') + '$',\n 'i'\n );\n this._minWeekdaysParse[i] = new RegExp(\n '^' + this.weekdaysMin(mom, '').replace('.', '\\\\.?') + '$',\n 'i'\n );\n }\n if (!this._weekdaysParse[i]) {\n regex =\n '^' +\n this.weekdays(mom, '') +\n '|^' +\n this.weekdaysShort(mom, '') +\n '|^' +\n this.weekdaysMin(mom, '');\n this._weekdaysParse[i] = new RegExp(regex.replace('.', ''), 'i');\n }\n // test the regex\n if (\n strict &&\n format === 'dddd' &&\n this._fullWeekdaysParse[i].test(weekdayName)\n ) {\n return i;\n } else if (\n strict &&\n format === 'ddd' &&\n this._shortWeekdaysParse[i].test(weekdayName)\n ) {\n return i;\n } else if (\n strict &&\n format === 'dd' &&\n this._minWeekdaysParse[i].test(weekdayName)\n ) {\n return i;\n } else if (!strict && this._weekdaysParse[i].test(weekdayName)) {\n return i;\n }\n }\n }\n\n // MOMENTS\n\n function getSetDayOfWeek(input) {\n if (!this.isValid()) {\n return input != null ? this : NaN;\n }\n var day = this._isUTC ? this._d.getUTCDay() : this._d.getDay();\n if (input != null) {\n input = parseWeekday(input, this.localeData());\n return this.add(input - day, 'd');\n } else {\n return day;\n }\n }\n\n function getSetLocaleDayOfWeek(input) {\n if (!this.isValid()) {\n return input != null ? this : NaN;\n }\n var weekday = (this.day() + 7 - this.localeData()._week.dow) % 7;\n return input == null ? weekday : this.add(input - weekday, 'd');\n }\n\n function getSetISODayOfWeek(input) {\n if (!this.isValid()) {\n return input != null ? this : NaN;\n }\n\n // behaves the same as moment#day except\n // as a getter, returns 7 instead of 0 (1-7 range instead of 0-6)\n // as a setter, sunday should belong to the previous week.\n\n if (input != null) {\n var weekday = parseIsoWeekday(input, this.localeData());\n return this.day(this.day() % 7 ? weekday : weekday - 7);\n } else {\n return this.day() || 7;\n }\n }\n\n function weekdaysRegex(isStrict) {\n if (this._weekdaysParseExact) {\n if (!hasOwnProp(this, '_weekdaysRegex')) {\n computeWeekdaysParse.call(this);\n }\n if (isStrict) {\n return this._weekdaysStrictRegex;\n } else {\n return this._weekdaysRegex;\n }\n } else {\n if (!hasOwnProp(this, '_weekdaysRegex')) {\n this._weekdaysRegex = defaultWeekdaysRegex;\n }\n return this._weekdaysStrictRegex && isStrict\n ? this._weekdaysStrictRegex\n : this._weekdaysRegex;\n }\n }\n\n function weekdaysShortRegex(isStrict) {\n if (this._weekdaysParseExact) {\n if (!hasOwnProp(this, '_weekdaysRegex')) {\n computeWeekdaysParse.call(this);\n }\n if (isStrict) {\n return this._weekdaysShortStrictRegex;\n } else {\n return this._weekdaysShortRegex;\n }\n } else {\n if (!hasOwnProp(this, '_weekdaysShortRegex')) {\n this._weekdaysShortRegex = defaultWeekdaysShortRegex;\n }\n return this._weekdaysShortStrictRegex && isStrict\n ? this._weekdaysShortStrictRegex\n : this._weekdaysShortRegex;\n }\n }\n\n function weekdaysMinRegex(isStrict) {\n if (this._weekdaysParseExact) {\n if (!hasOwnProp(this, '_weekdaysRegex')) {\n computeWeekdaysParse.call(this);\n }\n if (isStrict) {\n return this._weekdaysMinStrictRegex;\n } else {\n return this._weekdaysMinRegex;\n }\n } else {\n if (!hasOwnProp(this, '_weekdaysMinRegex')) {\n this._weekdaysMinRegex = defaultWeekdaysMinRegex;\n }\n return this._weekdaysMinStrictRegex && isStrict\n ? this._weekdaysMinStrictRegex\n : this._weekdaysMinRegex;\n }\n }\n\n function computeWeekdaysParse() {\n function cmpLenRev(a, b) {\n return b.length - a.length;\n }\n\n var minPieces = [],\n shortPieces = [],\n longPieces = [],\n mixedPieces = [],\n i,\n mom,\n minp,\n shortp,\n longp;\n for (i = 0; i < 7; i++) {\n // make the regex if we don't have it already\n mom = createUTC([2000, 1]).day(i);\n minp = regexEscape(this.weekdaysMin(mom, ''));\n shortp = regexEscape(this.weekdaysShort(mom, ''));\n longp = regexEscape(this.weekdays(mom, ''));\n minPieces.push(minp);\n shortPieces.push(shortp);\n longPieces.push(longp);\n mixedPieces.push(minp);\n mixedPieces.push(shortp);\n mixedPieces.push(longp);\n }\n // Sorting makes sure if one weekday (or abbr) is a prefix of another it\n // will match the longer piece.\n minPieces.sort(cmpLenRev);\n shortPieces.sort(cmpLenRev);\n longPieces.sort(cmpLenRev);\n mixedPieces.sort(cmpLenRev);\n\n this._weekdaysRegex = new RegExp('^(' + mixedPieces.join('|') + ')', 'i');\n this._weekdaysShortRegex = this._weekdaysRegex;\n this._weekdaysMinRegex = this._weekdaysRegex;\n\n this._weekdaysStrictRegex = new RegExp(\n '^(' + longPieces.join('|') + ')',\n 'i'\n );\n this._weekdaysShortStrictRegex = new RegExp(\n '^(' + shortPieces.join('|') + ')',\n 'i'\n );\n this._weekdaysMinStrictRegex = new RegExp(\n '^(' + minPieces.join('|') + ')',\n 'i'\n );\n }\n\n // FORMATTING\n\n function hFormat() {\n return this.hours() % 12 || 12;\n }\n\n function kFormat() {\n return this.hours() || 24;\n }\n\n addFormatToken('H', ['HH', 2], 0, 'hour');\n addFormatToken('h', ['hh', 2], 0, hFormat);\n addFormatToken('k', ['kk', 2], 0, kFormat);\n\n addFormatToken('hmm', 0, 0, function () {\n return '' + hFormat.apply(this) + zeroFill(this.minutes(), 2);\n });\n\n addFormatToken('hmmss', 0, 0, function () {\n return (\n '' +\n hFormat.apply(this) +\n zeroFill(this.minutes(), 2) +\n zeroFill(this.seconds(), 2)\n );\n });\n\n addFormatToken('Hmm', 0, 0, function () {\n return '' + this.hours() + zeroFill(this.minutes(), 2);\n });\n\n addFormatToken('Hmmss', 0, 0, function () {\n return (\n '' +\n this.hours() +\n zeroFill(this.minutes(), 2) +\n zeroFill(this.seconds(), 2)\n );\n });\n\n function meridiem(token, lowercase) {\n addFormatToken(token, 0, 0, function () {\n return this.localeData().meridiem(\n this.hours(),\n this.minutes(),\n lowercase\n );\n });\n }\n\n meridiem('a', true);\n meridiem('A', false);\n\n // ALIASES\n\n addUnitAlias('hour', 'h');\n\n // PRIORITY\n addUnitPriority('hour', 13);\n\n // PARSING\n\n function matchMeridiem(isStrict, locale) {\n return locale._meridiemParse;\n }\n\n addRegexToken('a', matchMeridiem);\n addRegexToken('A', matchMeridiem);\n addRegexToken('H', match1to2);\n addRegexToken('h', match1to2);\n addRegexToken('k', match1to2);\n addRegexToken('HH', match1to2, match2);\n addRegexToken('hh', match1to2, match2);\n addRegexToken('kk', match1to2, match2);\n\n addRegexToken('hmm', match3to4);\n addRegexToken('hmmss', match5to6);\n addRegexToken('Hmm', match3to4);\n addRegexToken('Hmmss', match5to6);\n\n addParseToken(['H', 'HH'], HOUR);\n addParseToken(['k', 'kk'], function (input, array, config) {\n var kInput = toInt(input);\n array[HOUR] = kInput === 24 ? 0 : kInput;\n });\n addParseToken(['a', 'A'], function (input, array, config) {\n config._isPm = config._locale.isPM(input);\n config._meridiem = input;\n });\n addParseToken(['h', 'hh'], function (input, array, config) {\n array[HOUR] = toInt(input);\n getParsingFlags(config).bigHour = true;\n });\n addParseToken('hmm', function (input, array, config) {\n var pos = input.length - 2;\n array[HOUR] = toInt(input.substr(0, pos));\n array[MINUTE] = toInt(input.substr(pos));\n getParsingFlags(config).bigHour = true;\n });\n addParseToken('hmmss', function (input, array, config) {\n var pos1 = input.length - 4,\n pos2 = input.length - 2;\n array[HOUR] = toInt(input.substr(0, pos1));\n array[MINUTE] = toInt(input.substr(pos1, 2));\n array[SECOND] = toInt(input.substr(pos2));\n getParsingFlags(config).bigHour = true;\n });\n addParseToken('Hmm', function (input, array, config) {\n var pos = input.length - 2;\n array[HOUR] = toInt(input.substr(0, pos));\n array[MINUTE] = toInt(input.substr(pos));\n });\n addParseToken('Hmmss', function (input, array, config) {\n var pos1 = input.length - 4,\n pos2 = input.length - 2;\n array[HOUR] = toInt(input.substr(0, pos1));\n array[MINUTE] = toInt(input.substr(pos1, 2));\n array[SECOND] = toInt(input.substr(pos2));\n });\n\n // LOCALES\n\n function localeIsPM(input) {\n // IE8 Quirks Mode & IE7 Standards Mode do not allow accessing strings like arrays\n // Using charAt should be more compatible.\n return (input + '').toLowerCase().charAt(0) === 'p';\n }\n\n var defaultLocaleMeridiemParse = /[ap]\\.?m?\\.?/i,\n // Setting the hour should keep the time, because the user explicitly\n // specified which hour they want. So trying to maintain the same hour (in\n // a new timezone) makes sense. Adding/subtracting hours does not follow\n // this rule.\n getSetHour = makeGetSet('Hours', true);\n\n function localeMeridiem(hours, minutes, isLower) {\n if (hours > 11) {\n return isLower ? 'pm' : 'PM';\n } else {\n return isLower ? 'am' : 'AM';\n }\n }\n\n var baseConfig = {\n calendar: defaultCalendar,\n longDateFormat: defaultLongDateFormat,\n invalidDate: defaultInvalidDate,\n ordinal: defaultOrdinal,\n dayOfMonthOrdinalParse: defaultDayOfMonthOrdinalParse,\n relativeTime: defaultRelativeTime,\n\n months: defaultLocaleMonths,\n monthsShort: defaultLocaleMonthsShort,\n\n week: defaultLocaleWeek,\n\n weekdays: defaultLocaleWeekdays,\n weekdaysMin: defaultLocaleWeekdaysMin,\n weekdaysShort: defaultLocaleWeekdaysShort,\n\n meridiemParse: defaultLocaleMeridiemParse,\n };\n\n // internal storage for locale config files\n var locales = {},\n localeFamilies = {},\n globalLocale;\n\n function commonPrefix(arr1, arr2) {\n var i,\n minl = Math.min(arr1.length, arr2.length);\n for (i = 0; i < minl; i += 1) {\n if (arr1[i] !== arr2[i]) {\n return i;\n }\n }\n return minl;\n }\n\n function normalizeLocale(key) {\n return key ? key.toLowerCase().replace('_', '-') : key;\n }\n\n // pick the locale from the array\n // try ['en-au', 'en-gb'] as 'en-au', 'en-gb', 'en', as in move through the list trying each\n // substring from most specific to least, but move to the next array item if it's a more specific variant than the current root\n function chooseLocale(names) {\n var i = 0,\n j,\n next,\n locale,\n split;\n\n while (i < names.length) {\n split = normalizeLocale(names[i]).split('-');\n j = split.length;\n next = normalizeLocale(names[i + 1]);\n next = next ? next.split('-') : null;\n while (j > 0) {\n locale = loadLocale(split.slice(0, j).join('-'));\n if (locale) {\n return locale;\n }\n if (\n next &&\n next.length >= j &&\n commonPrefix(split, next) >= j - 1\n ) {\n //the next array item is better than a shallower substring of this one\n break;\n }\n j--;\n }\n i++;\n }\n return globalLocale;\n }\n\n function isLocaleNameSane(name) {\n // Prevent names that look like filesystem paths, i.e contain '/' or '\\'\n return name.match('^[^/\\\\\\\\]*$') != null;\n }\n\n function loadLocale(name) {\n var oldLocale = null,\n aliasedRequire;\n // TODO: Find a better way to register and load all the locales in Node\n if (\n locales[name] === undefined &&\n typeof module !== 'undefined' &&\n module &&\n module.exports &&\n isLocaleNameSane(name)\n ) {\n try {\n oldLocale = globalLocale._abbr;\n aliasedRequire = require;\n aliasedRequire('./locale/' + name);\n getSetGlobalLocale(oldLocale);\n } catch (e) {\n // mark as not found to avoid repeating expensive file require call causing high CPU\n // when trying to find en-US, en_US, en-us for every format call\n locales[name] = null; // null means not found\n }\n }\n return locales[name];\n }\n\n // This function will load locale and then set the global locale. If\n // no arguments are passed in, it will simply return the current global\n // locale key.\n function getSetGlobalLocale(key, values) {\n var data;\n if (key) {\n if (isUndefined(values)) {\n data = getLocale(key);\n } else {\n data = defineLocale(key, values);\n }\n\n if (data) {\n // moment.duration._locale = moment._locale = data;\n globalLocale = data;\n } else {\n if (typeof console !== 'undefined' && console.warn) {\n //warn user if arguments are passed but the locale could not be set\n console.warn(\n 'Locale ' + key + ' not found. Did you forget to load it?'\n );\n }\n }\n }\n\n return globalLocale._abbr;\n }\n\n function defineLocale(name, config) {\n if (config !== null) {\n var locale,\n parentConfig = baseConfig;\n config.abbr = name;\n if (locales[name] != null) {\n deprecateSimple(\n 'defineLocaleOverride',\n 'use moment.updateLocale(localeName, config) to change ' +\n 'an existing locale. moment.defineLocale(localeName, ' +\n 'config) should only be used for creating a new locale ' +\n 'See http://momentjs.com/guides/#/warnings/define-locale/ for more info.'\n );\n parentConfig = locales[name]._config;\n } else if (config.parentLocale != null) {\n if (locales[config.parentLocale] != null) {\n parentConfig = locales[config.parentLocale]._config;\n } else {\n locale = loadLocale(config.parentLocale);\n if (locale != null) {\n parentConfig = locale._config;\n } else {\n if (!localeFamilies[config.parentLocale]) {\n localeFamilies[config.parentLocale] = [];\n }\n localeFamilies[config.parentLocale].push({\n name: name,\n config: config,\n });\n return null;\n }\n }\n }\n locales[name] = new Locale(mergeConfigs(parentConfig, config));\n\n if (localeFamilies[name]) {\n localeFamilies[name].forEach(function (x) {\n defineLocale(x.name, x.config);\n });\n }\n\n // backwards compat for now: also set the locale\n // make sure we set the locale AFTER all child locales have been\n // created, so we won't end up with the child locale set.\n getSetGlobalLocale(name);\n\n return locales[name];\n } else {\n // useful for testing\n delete locales[name];\n return null;\n }\n }\n\n function updateLocale(name, config) {\n if (config != null) {\n var locale,\n tmpLocale,\n parentConfig = baseConfig;\n\n if (locales[name] != null && locales[name].parentLocale != null) {\n // Update existing child locale in-place to avoid memory-leaks\n locales[name].set(mergeConfigs(locales[name]._config, config));\n } else {\n // MERGE\n tmpLocale = loadLocale(name);\n if (tmpLocale != null) {\n parentConfig = tmpLocale._config;\n }\n config = mergeConfigs(parentConfig, config);\n if (tmpLocale == null) {\n // updateLocale is called for creating a new locale\n // Set abbr so it will have a name (getters return\n // undefined otherwise).\n config.abbr = name;\n }\n locale = new Locale(config);\n locale.parentLocale = locales[name];\n locales[name] = locale;\n }\n\n // backwards compat for now: also set the locale\n getSetGlobalLocale(name);\n } else {\n // pass null for config to unupdate, useful for tests\n if (locales[name] != null) {\n if (locales[name].parentLocale != null) {\n locales[name] = locales[name].parentLocale;\n if (name === getSetGlobalLocale()) {\n getSetGlobalLocale(name);\n }\n } else if (locales[name] != null) {\n delete locales[name];\n }\n }\n }\n return locales[name];\n }\n\n // returns locale data\n function getLocale(key) {\n var locale;\n\n if (key && key._locale && key._locale._abbr) {\n key = key._locale._abbr;\n }\n\n if (!key) {\n return globalLocale;\n }\n\n if (!isArray(key)) {\n //short-circuit everything else\n locale = loadLocale(key);\n if (locale) {\n return locale;\n }\n key = [key];\n }\n\n return chooseLocale(key);\n }\n\n function listLocales() {\n return keys(locales);\n }\n\n function checkOverflow(m) {\n var overflow,\n a = m._a;\n\n if (a && getParsingFlags(m).overflow === -2) {\n overflow =\n a[MONTH] < 0 || a[MONTH] > 11\n ? MONTH\n : a[DATE] < 1 || a[DATE] > daysInMonth(a[YEAR], a[MONTH])\n ? DATE\n : a[HOUR] < 0 ||\n a[HOUR] > 24 ||\n (a[HOUR] === 24 &&\n (a[MINUTE] !== 0 ||\n a[SECOND] !== 0 ||\n a[MILLISECOND] !== 0))\n ? HOUR\n : a[MINUTE] < 0 || a[MINUTE] > 59\n ? MINUTE\n : a[SECOND] < 0 || a[SECOND] > 59\n ? SECOND\n : a[MILLISECOND] < 0 || a[MILLISECOND] > 999\n ? MILLISECOND\n : -1;\n\n if (\n getParsingFlags(m)._overflowDayOfYear &&\n (overflow < YEAR || overflow > DATE)\n ) {\n overflow = DATE;\n }\n if (getParsingFlags(m)._overflowWeeks && overflow === -1) {\n overflow = WEEK;\n }\n if (getParsingFlags(m)._overflowWeekday && overflow === -1) {\n overflow = WEEKDAY;\n }\n\n getParsingFlags(m).overflow = overflow;\n }\n\n return m;\n }\n\n // iso 8601 regex\n // 0000-00-00 0000-W00 or 0000-W00-0 + T + 00 or 00:00 or 00:00:00 or 00:00:00.000 + +00:00 or +0000 or +00)\n var extendedIsoRegex =\n /^\\s*((?:[+-]\\d{6}|\\d{4})-(?:\\d\\d-\\d\\d|W\\d\\d-\\d|W\\d\\d|\\d\\d\\d|\\d\\d))(?:(T| )(\\d\\d(?::\\d\\d(?::\\d\\d(?:[.,]\\d+)?)?)?)([+-]\\d\\d(?::?\\d\\d)?|\\s*Z)?)?$/,\n basicIsoRegex =\n /^\\s*((?:[+-]\\d{6}|\\d{4})(?:\\d\\d\\d\\d|W\\d\\d\\d|W\\d\\d|\\d\\d\\d|\\d\\d|))(?:(T| )(\\d\\d(?:\\d\\d(?:\\d\\d(?:[.,]\\d+)?)?)?)([+-]\\d\\d(?::?\\d\\d)?|\\s*Z)?)?$/,\n tzRegex = /Z|[+-]\\d\\d(?::?\\d\\d)?/,\n isoDates = [\n ['YYYYYY-MM-DD', /[+-]\\d{6}-\\d\\d-\\d\\d/],\n ['YYYY-MM-DD', /\\d{4}-\\d\\d-\\d\\d/],\n ['GGGG-[W]WW-E', /\\d{4}-W\\d\\d-\\d/],\n ['GGGG-[W]WW', /\\d{4}-W\\d\\d/, false],\n ['YYYY-DDD', /\\d{4}-\\d{3}/],\n ['YYYY-MM', /\\d{4}-\\d\\d/, false],\n ['YYYYYYMMDD', /[+-]\\d{10}/],\n ['YYYYMMDD', /\\d{8}/],\n ['GGGG[W]WWE', /\\d{4}W\\d{3}/],\n ['GGGG[W]WW', /\\d{4}W\\d{2}/, false],\n ['YYYYDDD', /\\d{7}/],\n ['YYYYMM', /\\d{6}/, false],\n ['YYYY', /\\d{4}/, false],\n ],\n // iso time formats and regexes\n isoTimes = [\n ['HH:mm:ss.SSSS', /\\d\\d:\\d\\d:\\d\\d\\.\\d+/],\n ['HH:mm:ss,SSSS', /\\d\\d:\\d\\d:\\d\\d,\\d+/],\n ['HH:mm:ss', /\\d\\d:\\d\\d:\\d\\d/],\n ['HH:mm', /\\d\\d:\\d\\d/],\n ['HHmmss.SSSS', /\\d\\d\\d\\d\\d\\d\\.\\d+/],\n ['HHmmss,SSSS', /\\d\\d\\d\\d\\d\\d,\\d+/],\n ['HHmmss', /\\d\\d\\d\\d\\d\\d/],\n ['HHmm', /\\d\\d\\d\\d/],\n ['HH', /\\d\\d/],\n ],\n aspNetJsonRegex = /^\\/?Date\\((-?\\d+)/i,\n // RFC 2822 regex: For details see https://tools.ietf.org/html/rfc2822#section-3.3\n rfc2822 =\n /^(?:(Mon|Tue|Wed|Thu|Fri|Sat|Sun),?\\s)?(\\d{1,2})\\s(Jan|Feb|Mar|Apr|May|Jun|Jul|Aug|Sep|Oct|Nov|Dec)\\s(\\d{2,4})\\s(\\d\\d):(\\d\\d)(?::(\\d\\d))?\\s(?:(UT|GMT|[ECMP][SD]T)|([Zz])|([+-]\\d{4}))$/,\n obsOffsets = {\n UT: 0,\n GMT: 0,\n EDT: -4 * 60,\n EST: -5 * 60,\n CDT: -5 * 60,\n CST: -6 * 60,\n MDT: -6 * 60,\n MST: -7 * 60,\n PDT: -7 * 60,\n PST: -8 * 60,\n };\n\n // date from iso format\n function configFromISO(config) {\n var i,\n l,\n string = config._i,\n match = extendedIsoRegex.exec(string) || basicIsoRegex.exec(string),\n allowTime,\n dateFormat,\n timeFormat,\n tzFormat,\n isoDatesLen = isoDates.length,\n isoTimesLen = isoTimes.length;\n\n if (match) {\n getParsingFlags(config).iso = true;\n for (i = 0, l = isoDatesLen; i < l; i++) {\n if (isoDates[i][1].exec(match[1])) {\n dateFormat = isoDates[i][0];\n allowTime = isoDates[i][2] !== false;\n break;\n }\n }\n if (dateFormat == null) {\n config._isValid = false;\n return;\n }\n if (match[3]) {\n for (i = 0, l = isoTimesLen; i < l; i++) {\n if (isoTimes[i][1].exec(match[3])) {\n // match[2] should be 'T' or space\n timeFormat = (match[2] || ' ') + isoTimes[i][0];\n break;\n }\n }\n if (timeFormat == null) {\n config._isValid = false;\n return;\n }\n }\n if (!allowTime && timeFormat != null) {\n config._isValid = false;\n return;\n }\n if (match[4]) {\n if (tzRegex.exec(match[4])) {\n tzFormat = 'Z';\n } else {\n config._isValid = false;\n return;\n }\n }\n config._f = dateFormat + (timeFormat || '') + (tzFormat || '');\n configFromStringAndFormat(config);\n } else {\n config._isValid = false;\n }\n }\n\n function extractFromRFC2822Strings(\n yearStr,\n monthStr,\n dayStr,\n hourStr,\n minuteStr,\n secondStr\n ) {\n var result = [\n untruncateYear(yearStr),\n defaultLocaleMonthsShort.indexOf(monthStr),\n parseInt(dayStr, 10),\n parseInt(hourStr, 10),\n parseInt(minuteStr, 10),\n ];\n\n if (secondStr) {\n result.push(parseInt(secondStr, 10));\n }\n\n return result;\n }\n\n function untruncateYear(yearStr) {\n var year = parseInt(yearStr, 10);\n if (year <= 49) {\n return 2000 + year;\n } else if (year <= 999) {\n return 1900 + year;\n }\n return year;\n }\n\n function preprocessRFC2822(s) {\n // Remove comments and folding whitespace and replace multiple-spaces with a single space\n return s\n .replace(/\\([^()]*\\)|[\\n\\t]/g, ' ')\n .replace(/(\\s\\s+)/g, ' ')\n .replace(/^\\s\\s*/, '')\n .replace(/\\s\\s*$/, '');\n }\n\n function checkWeekday(weekdayStr, parsedInput, config) {\n if (weekdayStr) {\n // TODO: Replace the vanilla JS Date object with an independent day-of-week check.\n var weekdayProvided = defaultLocaleWeekdaysShort.indexOf(weekdayStr),\n weekdayActual = new Date(\n parsedInput[0],\n parsedInput[1],\n parsedInput[2]\n ).getDay();\n if (weekdayProvided !== weekdayActual) {\n getParsingFlags(config).weekdayMismatch = true;\n config._isValid = false;\n return false;\n }\n }\n return true;\n }\n\n function calculateOffset(obsOffset, militaryOffset, numOffset) {\n if (obsOffset) {\n return obsOffsets[obsOffset];\n } else if (militaryOffset) {\n // the only allowed military tz is Z\n return 0;\n } else {\n var hm = parseInt(numOffset, 10),\n m = hm % 100,\n h = (hm - m) / 100;\n return h * 60 + m;\n }\n }\n\n // date and time from ref 2822 format\n function configFromRFC2822(config) {\n var match = rfc2822.exec(preprocessRFC2822(config._i)),\n parsedArray;\n if (match) {\n parsedArray = extractFromRFC2822Strings(\n match[4],\n match[3],\n match[2],\n match[5],\n match[6],\n match[7]\n );\n if (!checkWeekday(match[1], parsedArray, config)) {\n return;\n }\n\n config._a = parsedArray;\n config._tzm = calculateOffset(match[8], match[9], match[10]);\n\n config._d = createUTCDate.apply(null, config._a);\n config._d.setUTCMinutes(config._d.getUTCMinutes() - config._tzm);\n\n getParsingFlags(config).rfc2822 = true;\n } else {\n config._isValid = false;\n }\n }\n\n // date from 1) ASP.NET, 2) ISO, 3) RFC 2822 formats, or 4) optional fallback if parsing isn't strict\n function configFromString(config) {\n var matched = aspNetJsonRegex.exec(config._i);\n if (matched !== null) {\n config._d = new Date(+matched[1]);\n return;\n }\n\n configFromISO(config);\n if (config._isValid === false) {\n delete config._isValid;\n } else {\n return;\n }\n\n configFromRFC2822(config);\n if (config._isValid === false) {\n delete config._isValid;\n } else {\n return;\n }\n\n if (config._strict) {\n config._isValid = false;\n } else {\n // Final attempt, use Input Fallback\n hooks.createFromInputFallback(config);\n }\n }\n\n hooks.createFromInputFallback = deprecate(\n 'value provided is not in a recognized RFC2822 or ISO format. moment construction falls back to js Date(), ' +\n 'which is not reliable across all browsers and versions. Non RFC2822/ISO date formats are ' +\n 'discouraged. Please refer to http://momentjs.com/guides/#/warnings/js-date/ for more info.',\n function (config) {\n config._d = new Date(config._i + (config._useUTC ? ' UTC' : ''));\n }\n );\n\n // Pick the first defined of two or three arguments.\n function defaults(a, b, c) {\n if (a != null) {\n return a;\n }\n if (b != null) {\n return b;\n }\n return c;\n }\n\n function currentDateArray(config) {\n // hooks is actually the exported moment object\n var nowValue = new Date(hooks.now());\n if (config._useUTC) {\n return [\n nowValue.getUTCFullYear(),\n nowValue.getUTCMonth(),\n nowValue.getUTCDate(),\n ];\n }\n return [nowValue.getFullYear(), nowValue.getMonth(), nowValue.getDate()];\n }\n\n // convert an array to a date.\n // the array should mirror the parameters below\n // note: all values past the year are optional and will default to the lowest possible value.\n // [year, month, day , hour, minute, second, millisecond]\n function configFromArray(config) {\n var i,\n date,\n input = [],\n currentDate,\n expectedWeekday,\n yearToUse;\n\n if (config._d) {\n return;\n }\n\n currentDate = currentDateArray(config);\n\n //compute day of the year from weeks and weekdays\n if (config._w && config._a[DATE] == null && config._a[MONTH] == null) {\n dayOfYearFromWeekInfo(config);\n }\n\n //if the day of the year is set, figure out what it is\n if (config._dayOfYear != null) {\n yearToUse = defaults(config._a[YEAR], currentDate[YEAR]);\n\n if (\n config._dayOfYear > daysInYear(yearToUse) ||\n config._dayOfYear === 0\n ) {\n getParsingFlags(config)._overflowDayOfYear = true;\n }\n\n date = createUTCDate(yearToUse, 0, config._dayOfYear);\n config._a[MONTH] = date.getUTCMonth();\n config._a[DATE] = date.getUTCDate();\n }\n\n // Default to current date.\n // * if no year, month, day of month are given, default to today\n // * if day of month is given, default month and year\n // * if month is given, default only year\n // * if year is given, don't default anything\n for (i = 0; i < 3 && config._a[i] == null; ++i) {\n config._a[i] = input[i] = currentDate[i];\n }\n\n // Zero out whatever was not defaulted, including time\n for (; i < 7; i++) {\n config._a[i] = input[i] =\n config._a[i] == null ? (i === 2 ? 1 : 0) : config._a[i];\n }\n\n // Check for 24:00:00.000\n if (\n config._a[HOUR] === 24 &&\n config._a[MINUTE] === 0 &&\n config._a[SECOND] === 0 &&\n config._a[MILLISECOND] === 0\n ) {\n config._nextDay = true;\n config._a[HOUR] = 0;\n }\n\n config._d = (config._useUTC ? createUTCDate : createDate).apply(\n null,\n input\n );\n expectedWeekday = config._useUTC\n ? config._d.getUTCDay()\n : config._d.getDay();\n\n // Apply timezone offset from input. The actual utcOffset can be changed\n // with parseZone.\n if (config._tzm != null) {\n config._d.setUTCMinutes(config._d.getUTCMinutes() - config._tzm);\n }\n\n if (config._nextDay) {\n config._a[HOUR] = 24;\n }\n\n // check for mismatching day of week\n if (\n config._w &&\n typeof config._w.d !== 'undefined' &&\n config._w.d !== expectedWeekday\n ) {\n getParsingFlags(config).weekdayMismatch = true;\n }\n }\n\n function dayOfYearFromWeekInfo(config) {\n var w, weekYear, week, weekday, dow, doy, temp, weekdayOverflow, curWeek;\n\n w = config._w;\n if (w.GG != null || w.W != null || w.E != null) {\n dow = 1;\n doy = 4;\n\n // TODO: We need to take the current isoWeekYear, but that depends on\n // how we interpret now (local, utc, fixed offset). So create\n // a now version of current config (take local/utc/offset flags, and\n // create now).\n weekYear = defaults(\n w.GG,\n config._a[YEAR],\n weekOfYear(createLocal(), 1, 4).year\n );\n week = defaults(w.W, 1);\n weekday = defaults(w.E, 1);\n if (weekday < 1 || weekday > 7) {\n weekdayOverflow = true;\n }\n } else {\n dow = config._locale._week.dow;\n doy = config._locale._week.doy;\n\n curWeek = weekOfYear(createLocal(), dow, doy);\n\n weekYear = defaults(w.gg, config._a[YEAR], curWeek.year);\n\n // Default to current week.\n week = defaults(w.w, curWeek.week);\n\n if (w.d != null) {\n // weekday -- low day numbers are considered next week\n weekday = w.d;\n if (weekday < 0 || weekday > 6) {\n weekdayOverflow = true;\n }\n } else if (w.e != null) {\n // local weekday -- counting starts from beginning of week\n weekday = w.e + dow;\n if (w.e < 0 || w.e > 6) {\n weekdayOverflow = true;\n }\n } else {\n // default to beginning of week\n weekday = dow;\n }\n }\n if (week < 1 || week > weeksInYear(weekYear, dow, doy)) {\n getParsingFlags(config)._overflowWeeks = true;\n } else if (weekdayOverflow != null) {\n getParsingFlags(config)._overflowWeekday = true;\n } else {\n temp = dayOfYearFromWeeks(weekYear, week, weekday, dow, doy);\n config._a[YEAR] = temp.year;\n config._dayOfYear = temp.dayOfYear;\n }\n }\n\n // constant that refers to the ISO standard\n hooks.ISO_8601 = function () {};\n\n // constant that refers to the RFC 2822 form\n hooks.RFC_2822 = function () {};\n\n // date from string and format string\n function configFromStringAndFormat(config) {\n // TODO: Move this to another part of the creation flow to prevent circular deps\n if (config._f === hooks.ISO_8601) {\n configFromISO(config);\n return;\n }\n if (config._f === hooks.RFC_2822) {\n configFromRFC2822(config);\n return;\n }\n config._a = [];\n getParsingFlags(config).empty = true;\n\n // This array is used to make a Date, either with `new Date` or `Date.UTC`\n var string = '' + config._i,\n i,\n parsedInput,\n tokens,\n token,\n skipped,\n stringLength = string.length,\n totalParsedInputLength = 0,\n era,\n tokenLen;\n\n tokens =\n expandFormat(config._f, config._locale).match(formattingTokens) || [];\n tokenLen = tokens.length;\n for (i = 0; i < tokenLen; i++) {\n token = tokens[i];\n parsedInput = (string.match(getParseRegexForToken(token, config)) ||\n [])[0];\n if (parsedInput) {\n skipped = string.substr(0, string.indexOf(parsedInput));\n if (skipped.length > 0) {\n getParsingFlags(config).unusedInput.push(skipped);\n }\n string = string.slice(\n string.indexOf(parsedInput) + parsedInput.length\n );\n totalParsedInputLength += parsedInput.length;\n }\n // don't parse if it's not a known token\n if (formatTokenFunctions[token]) {\n if (parsedInput) {\n getParsingFlags(config).empty = false;\n } else {\n getParsingFlags(config).unusedTokens.push(token);\n }\n addTimeToArrayFromToken(token, parsedInput, config);\n } else if (config._strict && !parsedInput) {\n getParsingFlags(config).unusedTokens.push(token);\n }\n }\n\n // add remaining unparsed input length to the string\n getParsingFlags(config).charsLeftOver =\n stringLength - totalParsedInputLength;\n if (string.length > 0) {\n getParsingFlags(config).unusedInput.push(string);\n }\n\n // clear _12h flag if hour is <= 12\n if (\n config._a[HOUR] <= 12 &&\n getParsingFlags(config).bigHour === true &&\n config._a[HOUR] > 0\n ) {\n getParsingFlags(config).bigHour = undefined;\n }\n\n getParsingFlags(config).parsedDateParts = config._a.slice(0);\n getParsingFlags(config).meridiem = config._meridiem;\n // handle meridiem\n config._a[HOUR] = meridiemFixWrap(\n config._locale,\n config._a[HOUR],\n config._meridiem\n );\n\n // handle era\n era = getParsingFlags(config).era;\n if (era !== null) {\n config._a[YEAR] = config._locale.erasConvertYear(era, config._a[YEAR]);\n }\n\n configFromArray(config);\n checkOverflow(config);\n }\n\n function meridiemFixWrap(locale, hour, meridiem) {\n var isPm;\n\n if (meridiem == null) {\n // nothing to do\n return hour;\n }\n if (locale.meridiemHour != null) {\n return locale.meridiemHour(hour, meridiem);\n } else if (locale.isPM != null) {\n // Fallback\n isPm = locale.isPM(meridiem);\n if (isPm && hour < 12) {\n hour += 12;\n }\n if (!isPm && hour === 12) {\n hour = 0;\n }\n return hour;\n } else {\n // this is not supposed to happen\n return hour;\n }\n }\n\n // date from string and array of format strings\n function configFromStringAndArray(config) {\n var tempConfig,\n bestMoment,\n scoreToBeat,\n i,\n currentScore,\n validFormatFound,\n bestFormatIsValid = false,\n configfLen = config._f.length;\n\n if (configfLen === 0) {\n getParsingFlags(config).invalidFormat = true;\n config._d = new Date(NaN);\n return;\n }\n\n for (i = 0; i < configfLen; i++) {\n currentScore = 0;\n validFormatFound = false;\n tempConfig = copyConfig({}, config);\n if (config._useUTC != null) {\n tempConfig._useUTC = config._useUTC;\n }\n tempConfig._f = config._f[i];\n configFromStringAndFormat(tempConfig);\n\n if (isValid(tempConfig)) {\n validFormatFound = true;\n }\n\n // if there is any input that was not parsed add a penalty for that format\n currentScore += getParsingFlags(tempConfig).charsLeftOver;\n\n //or tokens\n currentScore += getParsingFlags(tempConfig).unusedTokens.length * 10;\n\n getParsingFlags(tempConfig).score = currentScore;\n\n if (!bestFormatIsValid) {\n if (\n scoreToBeat == null ||\n currentScore < scoreToBeat ||\n validFormatFound\n ) {\n scoreToBeat = currentScore;\n bestMoment = tempConfig;\n if (validFormatFound) {\n bestFormatIsValid = true;\n }\n }\n } else {\n if (currentScore < scoreToBeat) {\n scoreToBeat = currentScore;\n bestMoment = tempConfig;\n }\n }\n }\n\n extend(config, bestMoment || tempConfig);\n }\n\n function configFromObject(config) {\n if (config._d) {\n return;\n }\n\n var i = normalizeObjectUnits(config._i),\n dayOrDate = i.day === undefined ? i.date : i.day;\n config._a = map(\n [i.year, i.month, dayOrDate, i.hour, i.minute, i.second, i.millisecond],\n function (obj) {\n return obj && parseInt(obj, 10);\n }\n );\n\n configFromArray(config);\n }\n\n function createFromConfig(config) {\n var res = new Moment(checkOverflow(prepareConfig(config)));\n if (res._nextDay) {\n // Adding is smart enough around DST\n res.add(1, 'd');\n res._nextDay = undefined;\n }\n\n return res;\n }\n\n function prepareConfig(config) {\n var input = config._i,\n format = config._f;\n\n config._locale = config._locale || getLocale(config._l);\n\n if (input === null || (format === undefined && input === '')) {\n return createInvalid({ nullInput: true });\n }\n\n if (typeof input === 'string') {\n config._i = input = config._locale.preparse(input);\n }\n\n if (isMoment(input)) {\n return new Moment(checkOverflow(input));\n } else if (isDate(input)) {\n config._d = input;\n } else if (isArray(format)) {\n configFromStringAndArray(config);\n } else if (format) {\n configFromStringAndFormat(config);\n } else {\n configFromInput(config);\n }\n\n if (!isValid(config)) {\n config._d = null;\n }\n\n return config;\n }\n\n function configFromInput(config) {\n var input = config._i;\n if (isUndefined(input)) {\n config._d = new Date(hooks.now());\n } else if (isDate(input)) {\n config._d = new Date(input.valueOf());\n } else if (typeof input === 'string') {\n configFromString(config);\n } else if (isArray(input)) {\n config._a = map(input.slice(0), function (obj) {\n return parseInt(obj, 10);\n });\n configFromArray(config);\n } else if (isObject(input)) {\n configFromObject(config);\n } else if (isNumber(input)) {\n // from milliseconds\n config._d = new Date(input);\n } else {\n hooks.createFromInputFallback(config);\n }\n }\n\n function createLocalOrUTC(input, format, locale, strict, isUTC) {\n var c = {};\n\n if (format === true || format === false) {\n strict = format;\n format = undefined;\n }\n\n if (locale === true || locale === false) {\n strict = locale;\n locale = undefined;\n }\n\n if (\n (isObject(input) && isObjectEmpty(input)) ||\n (isArray(input) && input.length === 0)\n ) {\n input = undefined;\n }\n // object construction must be done this way.\n // https://github.com/moment/moment/issues/1423\n c._isAMomentObject = true;\n c._useUTC = c._isUTC = isUTC;\n c._l = locale;\n c._i = input;\n c._f = format;\n c._strict = strict;\n\n return createFromConfig(c);\n }\n\n function createLocal(input, format, locale, strict) {\n return createLocalOrUTC(input, format, locale, strict, false);\n }\n\n var prototypeMin = deprecate(\n 'moment().min is deprecated, use moment.max instead. http://momentjs.com/guides/#/warnings/min-max/',\n function () {\n var other = createLocal.apply(null, arguments);\n if (this.isValid() && other.isValid()) {\n return other < this ? this : other;\n } else {\n return createInvalid();\n }\n }\n ),\n prototypeMax = deprecate(\n 'moment().max is deprecated, use moment.min instead. http://momentjs.com/guides/#/warnings/min-max/',\n function () {\n var other = createLocal.apply(null, arguments);\n if (this.isValid() && other.isValid()) {\n return other > this ? this : other;\n } else {\n return createInvalid();\n }\n }\n );\n\n // Pick a moment m from moments so that m[fn](other) is true for all\n // other. This relies on the function fn to be transitive.\n //\n // moments should either be an array of moment objects or an array, whose\n // first element is an array of moment objects.\n function pickBy(fn, moments) {\n var res, i;\n if (moments.length === 1 && isArray(moments[0])) {\n moments = moments[0];\n }\n if (!moments.length) {\n return createLocal();\n }\n res = moments[0];\n for (i = 1; i < moments.length; ++i) {\n if (!moments[i].isValid() || moments[i][fn](res)) {\n res = moments[i];\n }\n }\n return res;\n }\n\n // TODO: Use [].sort instead?\n function min() {\n var args = [].slice.call(arguments, 0);\n\n return pickBy('isBefore', args);\n }\n\n function max() {\n var args = [].slice.call(arguments, 0);\n\n return pickBy('isAfter', args);\n }\n\n var now = function () {\n return Date.now ? Date.now() : +new Date();\n };\n\n var ordering = [\n 'year',\n 'quarter',\n 'month',\n 'week',\n 'day',\n 'hour',\n 'minute',\n 'second',\n 'millisecond',\n ];\n\n function isDurationValid(m) {\n var key,\n unitHasDecimal = false,\n i,\n orderLen = ordering.length;\n for (key in m) {\n if (\n hasOwnProp(m, key) &&\n !(\n indexOf.call(ordering, key) !== -1 &&\n (m[key] == null || !isNaN(m[key]))\n )\n ) {\n return false;\n }\n }\n\n for (i = 0; i < orderLen; ++i) {\n if (m[ordering[i]]) {\n if (unitHasDecimal) {\n return false; // only allow non-integers for smallest unit\n }\n if (parseFloat(m[ordering[i]]) !== toInt(m[ordering[i]])) {\n unitHasDecimal = true;\n }\n }\n }\n\n return true;\n }\n\n function isValid$1() {\n return this._isValid;\n }\n\n function createInvalid$1() {\n return createDuration(NaN);\n }\n\n function Duration(duration) {\n var normalizedInput = normalizeObjectUnits(duration),\n years = normalizedInput.year || 0,\n quarters = normalizedInput.quarter || 0,\n months = normalizedInput.month || 0,\n weeks = normalizedInput.week || normalizedInput.isoWeek || 0,\n days = normalizedInput.day || 0,\n hours = normalizedInput.hour || 0,\n minutes = normalizedInput.minute || 0,\n seconds = normalizedInput.second || 0,\n milliseconds = normalizedInput.millisecond || 0;\n\n this._isValid = isDurationValid(normalizedInput);\n\n // representation for dateAddRemove\n this._milliseconds =\n +milliseconds +\n seconds * 1e3 + // 1000\n minutes * 6e4 + // 1000 * 60\n hours * 1000 * 60 * 60; //using 1000 * 60 * 60 instead of 36e5 to avoid floating point rounding errors https://github.com/moment/moment/issues/2978\n // Because of dateAddRemove treats 24 hours as different from a\n // day when working around DST, we need to store them separately\n this._days = +days + weeks * 7;\n // It is impossible to translate months into days without knowing\n // which months you are are talking about, so we have to store\n // it separately.\n this._months = +months + quarters * 3 + years * 12;\n\n this._data = {};\n\n this._locale = getLocale();\n\n this._bubble();\n }\n\n function isDuration(obj) {\n return obj instanceof Duration;\n }\n\n function absRound(number) {\n if (number < 0) {\n return Math.round(-1 * number) * -1;\n } else {\n return Math.round(number);\n }\n }\n\n // compare two arrays, return the number of differences\n function compareArrays(array1, array2, dontConvert) {\n var len = Math.min(array1.length, array2.length),\n lengthDiff = Math.abs(array1.length - array2.length),\n diffs = 0,\n i;\n for (i = 0; i < len; i++) {\n if (\n (dontConvert && array1[i] !== array2[i]) ||\n (!dontConvert && toInt(array1[i]) !== toInt(array2[i]))\n ) {\n diffs++;\n }\n }\n return diffs + lengthDiff;\n }\n\n // FORMATTING\n\n function offset(token, separator) {\n addFormatToken(token, 0, 0, function () {\n var offset = this.utcOffset(),\n sign = '+';\n if (offset < 0) {\n offset = -offset;\n sign = '-';\n }\n return (\n sign +\n zeroFill(~~(offset / 60), 2) +\n separator +\n zeroFill(~~offset % 60, 2)\n );\n });\n }\n\n offset('Z', ':');\n offset('ZZ', '');\n\n // PARSING\n\n addRegexToken('Z', matchShortOffset);\n addRegexToken('ZZ', matchShortOffset);\n addParseToken(['Z', 'ZZ'], function (input, array, config) {\n config._useUTC = true;\n config._tzm = offsetFromString(matchShortOffset, input);\n });\n\n // HELPERS\n\n // timezone chunker\n // '+10:00' > ['10', '00']\n // '-1530' > ['-15', '30']\n var chunkOffset = /([\\+\\-]|\\d\\d)/gi;\n\n function offsetFromString(matcher, string) {\n var matches = (string || '').match(matcher),\n chunk,\n parts,\n minutes;\n\n if (matches === null) {\n return null;\n }\n\n chunk = matches[matches.length - 1] || [];\n parts = (chunk + '').match(chunkOffset) || ['-', 0, 0];\n minutes = +(parts[1] * 60) + toInt(parts[2]);\n\n return minutes === 0 ? 0 : parts[0] === '+' ? minutes : -minutes;\n }\n\n // Return a moment from input, that is local/utc/zone equivalent to model.\n function cloneWithOffset(input, model) {\n var res, diff;\n if (model._isUTC) {\n res = model.clone();\n diff =\n (isMoment(input) || isDate(input)\n ? input.valueOf()\n : createLocal(input).valueOf()) - res.valueOf();\n // Use low-level api, because this fn is low-level api.\n res._d.setTime(res._d.valueOf() + diff);\n hooks.updateOffset(res, false);\n return res;\n } else {\n return createLocal(input).local();\n }\n }\n\n function getDateOffset(m) {\n // On Firefox.24 Date#getTimezoneOffset returns a floating point.\n // https://github.com/moment/moment/pull/1871\n return -Math.round(m._d.getTimezoneOffset());\n }\n\n // HOOKS\n\n // This function will be called whenever a moment is mutated.\n // It is intended to keep the offset in sync with the timezone.\n hooks.updateOffset = function () {};\n\n // MOMENTS\n\n // keepLocalTime = true means only change the timezone, without\n // affecting the local hour. So 5:31:26 +0300 --[utcOffset(2, true)]-->\n // 5:31:26 +0200 It is possible that 5:31:26 doesn't exist with offset\n // +0200, so we adjust the time as needed, to be valid.\n //\n // Keeping the time actually adds/subtracts (one hour)\n // from the actual represented time. That is why we call updateOffset\n // a second time. In case it wants us to change the offset again\n // _changeInProgress == true case, then we have to adjust, because\n // there is no such time in the given timezone.\n function getSetOffset(input, keepLocalTime, keepMinutes) {\n var offset = this._offset || 0,\n localAdjust;\n if (!this.isValid()) {\n return input != null ? this : NaN;\n }\n if (input != null) {\n if (typeof input === 'string') {\n input = offsetFromString(matchShortOffset, input);\n if (input === null) {\n return this;\n }\n } else if (Math.abs(input) < 16 && !keepMinutes) {\n input = input * 60;\n }\n if (!this._isUTC && keepLocalTime) {\n localAdjust = getDateOffset(this);\n }\n this._offset = input;\n this._isUTC = true;\n if (localAdjust != null) {\n this.add(localAdjust, 'm');\n }\n if (offset !== input) {\n if (!keepLocalTime || this._changeInProgress) {\n addSubtract(\n this,\n createDuration(input - offset, 'm'),\n 1,\n false\n );\n } else if (!this._changeInProgress) {\n this._changeInProgress = true;\n hooks.updateOffset(this, true);\n this._changeInProgress = null;\n }\n }\n return this;\n } else {\n return this._isUTC ? offset : getDateOffset(this);\n }\n }\n\n function getSetZone(input, keepLocalTime) {\n if (input != null) {\n if (typeof input !== 'string') {\n input = -input;\n }\n\n this.utcOffset(input, keepLocalTime);\n\n return this;\n } else {\n return -this.utcOffset();\n }\n }\n\n function setOffsetToUTC(keepLocalTime) {\n return this.utcOffset(0, keepLocalTime);\n }\n\n function setOffsetToLocal(keepLocalTime) {\n if (this._isUTC) {\n this.utcOffset(0, keepLocalTime);\n this._isUTC = false;\n\n if (keepLocalTime) {\n this.subtract(getDateOffset(this), 'm');\n }\n }\n return this;\n }\n\n function setOffsetToParsedOffset() {\n if (this._tzm != null) {\n this.utcOffset(this._tzm, false, true);\n } else if (typeof this._i === 'string') {\n var tZone = offsetFromString(matchOffset, this._i);\n if (tZone != null) {\n this.utcOffset(tZone);\n } else {\n this.utcOffset(0, true);\n }\n }\n return this;\n }\n\n function hasAlignedHourOffset(input) {\n if (!this.isValid()) {\n return false;\n }\n input = input ? createLocal(input).utcOffset() : 0;\n\n return (this.utcOffset() - input) % 60 === 0;\n }\n\n function isDaylightSavingTime() {\n return (\n this.utcOffset() > this.clone().month(0).utcOffset() ||\n this.utcOffset() > this.clone().month(5).utcOffset()\n );\n }\n\n function isDaylightSavingTimeShifted() {\n if (!isUndefined(this._isDSTShifted)) {\n return this._isDSTShifted;\n }\n\n var c = {},\n other;\n\n copyConfig(c, this);\n c = prepareConfig(c);\n\n if (c._a) {\n other = c._isUTC ? createUTC(c._a) : createLocal(c._a);\n this._isDSTShifted =\n this.isValid() && compareArrays(c._a, other.toArray()) > 0;\n } else {\n this._isDSTShifted = false;\n }\n\n return this._isDSTShifted;\n }\n\n function isLocal() {\n return this.isValid() ? !this._isUTC : false;\n }\n\n function isUtcOffset() {\n return this.isValid() ? this._isUTC : false;\n }\n\n function isUtc() {\n return this.isValid() ? this._isUTC && this._offset === 0 : false;\n }\n\n // ASP.NET json date format regex\n var aspNetRegex = /^(-|\\+)?(?:(\\d*)[. ])?(\\d+):(\\d+)(?::(\\d+)(\\.\\d*)?)?$/,\n // from http://docs.closure-library.googlecode.com/git/closure_goog_date_date.js.source.html\n // somewhat more in line with 4.4.3.2 2004 spec, but allows decimal anywhere\n // and further modified to allow for strings containing both week and day\n isoRegex =\n /^(-|\\+)?P(?:([-+]?[0-9,.]*)Y)?(?:([-+]?[0-9,.]*)M)?(?:([-+]?[0-9,.]*)W)?(?:([-+]?[0-9,.]*)D)?(?:T(?:([-+]?[0-9,.]*)H)?(?:([-+]?[0-9,.]*)M)?(?:([-+]?[0-9,.]*)S)?)?$/;\n\n function createDuration(input, key) {\n var duration = input,\n // matching against regexp is expensive, do it on demand\n match = null,\n sign,\n ret,\n diffRes;\n\n if (isDuration(input)) {\n duration = {\n ms: input._milliseconds,\n d: input._days,\n M: input._months,\n };\n } else if (isNumber(input) || !isNaN(+input)) {\n duration = {};\n if (key) {\n duration[key] = +input;\n } else {\n duration.milliseconds = +input;\n }\n } else if ((match = aspNetRegex.exec(input))) {\n sign = match[1] === '-' ? -1 : 1;\n duration = {\n y: 0,\n d: toInt(match[DATE]) * sign,\n h: toInt(match[HOUR]) * sign,\n m: toInt(match[MINUTE]) * sign,\n s: toInt(match[SECOND]) * sign,\n ms: toInt(absRound(match[MILLISECOND] * 1000)) * sign, // the millisecond decimal point is included in the match\n };\n } else if ((match = isoRegex.exec(input))) {\n sign = match[1] === '-' ? -1 : 1;\n duration = {\n y: parseIso(match[2], sign),\n M: parseIso(match[3], sign),\n w: parseIso(match[4], sign),\n d: parseIso(match[5], sign),\n h: parseIso(match[6], sign),\n m: parseIso(match[7], sign),\n s: parseIso(match[8], sign),\n };\n } else if (duration == null) {\n // checks for null or undefined\n duration = {};\n } else if (\n typeof duration === 'object' &&\n ('from' in duration || 'to' in duration)\n ) {\n diffRes = momentsDifference(\n createLocal(duration.from),\n createLocal(duration.to)\n );\n\n duration = {};\n duration.ms = diffRes.milliseconds;\n duration.M = diffRes.months;\n }\n\n ret = new Duration(duration);\n\n if (isDuration(input) && hasOwnProp(input, '_locale')) {\n ret._locale = input._locale;\n }\n\n if (isDuration(input) && hasOwnProp(input, '_isValid')) {\n ret._isValid = input._isValid;\n }\n\n return ret;\n }\n\n createDuration.fn = Duration.prototype;\n createDuration.invalid = createInvalid$1;\n\n function parseIso(inp, sign) {\n // We'd normally use ~~inp for this, but unfortunately it also\n // converts floats to ints.\n // inp may be undefined, so careful calling replace on it.\n var res = inp && parseFloat(inp.replace(',', '.'));\n // apply sign while we're at it\n return (isNaN(res) ? 0 : res) * sign;\n }\n\n function positiveMomentsDifference(base, other) {\n var res = {};\n\n res.months =\n other.month() - base.month() + (other.year() - base.year()) * 12;\n if (base.clone().add(res.months, 'M').isAfter(other)) {\n --res.months;\n }\n\n res.milliseconds = +other - +base.clone().add(res.months, 'M');\n\n return res;\n }\n\n function momentsDifference(base, other) {\n var res;\n if (!(base.isValid() && other.isValid())) {\n return { milliseconds: 0, months: 0 };\n }\n\n other = cloneWithOffset(other, base);\n if (base.isBefore(other)) {\n res = positiveMomentsDifference(base, other);\n } else {\n res = positiveMomentsDifference(other, base);\n res.milliseconds = -res.milliseconds;\n res.months = -res.months;\n }\n\n return res;\n }\n\n // TODO: remove 'name' arg after deprecation is removed\n function createAdder(direction, name) {\n return function (val, period) {\n var dur, tmp;\n //invert the arguments, but complain about it\n if (period !== null && !isNaN(+period)) {\n deprecateSimple(\n name,\n 'moment().' +\n name +\n '(period, number) is deprecated. Please use moment().' +\n name +\n '(number, period). ' +\n 'See http://momentjs.com/guides/#/warnings/add-inverted-param/ for more info.'\n );\n tmp = val;\n val = period;\n period = tmp;\n }\n\n dur = createDuration(val, period);\n addSubtract(this, dur, direction);\n return this;\n };\n }\n\n function addSubtract(mom, duration, isAdding, updateOffset) {\n var milliseconds = duration._milliseconds,\n days = absRound(duration._days),\n months = absRound(duration._months);\n\n if (!mom.isValid()) {\n // No op\n return;\n }\n\n updateOffset = updateOffset == null ? true : updateOffset;\n\n if (months) {\n setMonth(mom, get(mom, 'Month') + months * isAdding);\n }\n if (days) {\n set$1(mom, 'Date', get(mom, 'Date') + days * isAdding);\n }\n if (milliseconds) {\n mom._d.setTime(mom._d.valueOf() + milliseconds * isAdding);\n }\n if (updateOffset) {\n hooks.updateOffset(mom, days || months);\n }\n }\n\n var add = createAdder(1, 'add'),\n subtract = createAdder(-1, 'subtract');\n\n function isString(input) {\n return typeof input === 'string' || input instanceof String;\n }\n\n // type MomentInput = Moment | Date | string | number | (number | string)[] | MomentInputObject | void; // null | undefined\n function isMomentInput(input) {\n return (\n isMoment(input) ||\n isDate(input) ||\n isString(input) ||\n isNumber(input) ||\n isNumberOrStringArray(input) ||\n isMomentInputObject(input) ||\n input === null ||\n input === undefined\n );\n }\n\n function isMomentInputObject(input) {\n var objectTest = isObject(input) && !isObjectEmpty(input),\n propertyTest = false,\n properties = [\n 'years',\n 'year',\n 'y',\n 'months',\n 'month',\n 'M',\n 'days',\n 'day',\n 'd',\n 'dates',\n 'date',\n 'D',\n 'hours',\n 'hour',\n 'h',\n 'minutes',\n 'minute',\n 'm',\n 'seconds',\n 'second',\n 's',\n 'milliseconds',\n 'millisecond',\n 'ms',\n ],\n i,\n property,\n propertyLen = properties.length;\n\n for (i = 0; i < propertyLen; i += 1) {\n property = properties[i];\n propertyTest = propertyTest || hasOwnProp(input, property);\n }\n\n return objectTest && propertyTest;\n }\n\n function isNumberOrStringArray(input) {\n var arrayTest = isArray(input),\n dataTypeTest = false;\n if (arrayTest) {\n dataTypeTest =\n input.filter(function (item) {\n return !isNumber(item) && isString(input);\n }).length === 0;\n }\n return arrayTest && dataTypeTest;\n }\n\n function isCalendarSpec(input) {\n var objectTest = isObject(input) && !isObjectEmpty(input),\n propertyTest = false,\n properties = [\n 'sameDay',\n 'nextDay',\n 'lastDay',\n 'nextWeek',\n 'lastWeek',\n 'sameElse',\n ],\n i,\n property;\n\n for (i = 0; i < properties.length; i += 1) {\n property = properties[i];\n propertyTest = propertyTest || hasOwnProp(input, property);\n }\n\n return objectTest && propertyTest;\n }\n\n function getCalendarFormat(myMoment, now) {\n var diff = myMoment.diff(now, 'days', true);\n return diff < -6\n ? 'sameElse'\n : diff < -1\n ? 'lastWeek'\n : diff < 0\n ? 'lastDay'\n : diff < 1\n ? 'sameDay'\n : diff < 2\n ? 'nextDay'\n : diff < 7\n ? 'nextWeek'\n : 'sameElse';\n }\n\n function calendar$1(time, formats) {\n // Support for single parameter, formats only overload to the calendar function\n if (arguments.length === 1) {\n if (!arguments[0]) {\n time = undefined;\n formats = undefined;\n } else if (isMomentInput(arguments[0])) {\n time = arguments[0];\n formats = undefined;\n } else if (isCalendarSpec(arguments[0])) {\n formats = arguments[0];\n time = undefined;\n }\n }\n // We want to compare the start of today, vs this.\n // Getting start-of-today depends on whether we're local/utc/offset or not.\n var now = time || createLocal(),\n sod = cloneWithOffset(now, this).startOf('day'),\n format = hooks.calendarFormat(this, sod) || 'sameElse',\n output =\n formats &&\n (isFunction(formats[format])\n ? formats[format].call(this, now)\n : formats[format]);\n\n return this.format(\n output || this.localeData().calendar(format, this, createLocal(now))\n );\n }\n\n function clone() {\n return new Moment(this);\n }\n\n function isAfter(input, units) {\n var localInput = isMoment(input) ? input : createLocal(input);\n if (!(this.isValid() && localInput.isValid())) {\n return false;\n }\n units = normalizeUnits(units) || 'millisecond';\n if (units === 'millisecond') {\n return this.valueOf() > localInput.valueOf();\n } else {\n return localInput.valueOf() < this.clone().startOf(units).valueOf();\n }\n }\n\n function isBefore(input, units) {\n var localInput = isMoment(input) ? input : createLocal(input);\n if (!(this.isValid() && localInput.isValid())) {\n return false;\n }\n units = normalizeUnits(units) || 'millisecond';\n if (units === 'millisecond') {\n return this.valueOf() < localInput.valueOf();\n } else {\n return this.clone().endOf(units).valueOf() < localInput.valueOf();\n }\n }\n\n function isBetween(from, to, units, inclusivity) {\n var localFrom = isMoment(from) ? from : createLocal(from),\n localTo = isMoment(to) ? to : createLocal(to);\n if (!(this.isValid() && localFrom.isValid() && localTo.isValid())) {\n return false;\n }\n inclusivity = inclusivity || '()';\n return (\n (inclusivity[0] === '('\n ? this.isAfter(localFrom, units)\n : !this.isBefore(localFrom, units)) &&\n (inclusivity[1] === ')'\n ? this.isBefore(localTo, units)\n : !this.isAfter(localTo, units))\n );\n }\n\n function isSame(input, units) {\n var localInput = isMoment(input) ? input : createLocal(input),\n inputMs;\n if (!(this.isValid() && localInput.isValid())) {\n return false;\n }\n units = normalizeUnits(units) || 'millisecond';\n if (units === 'millisecond') {\n return this.valueOf() === localInput.valueOf();\n } else {\n inputMs = localInput.valueOf();\n return (\n this.clone().startOf(units).valueOf() <= inputMs &&\n inputMs <= this.clone().endOf(units).valueOf()\n );\n }\n }\n\n function isSameOrAfter(input, units) {\n return this.isSame(input, units) || this.isAfter(input, units);\n }\n\n function isSameOrBefore(input, units) {\n return this.isSame(input, units) || this.isBefore(input, units);\n }\n\n function diff(input, units, asFloat) {\n var that, zoneDelta, output;\n\n if (!this.isValid()) {\n return NaN;\n }\n\n that = cloneWithOffset(input, this);\n\n if (!that.isValid()) {\n return NaN;\n }\n\n zoneDelta = (that.utcOffset() - this.utcOffset()) * 6e4;\n\n units = normalizeUnits(units);\n\n switch (units) {\n case 'year':\n output = monthDiff(this, that) / 12;\n break;\n case 'month':\n output = monthDiff(this, that);\n break;\n case 'quarter':\n output = monthDiff(this, that) / 3;\n break;\n case 'second':\n output = (this - that) / 1e3;\n break; // 1000\n case 'minute':\n output = (this - that) / 6e4;\n break; // 1000 * 60\n case 'hour':\n output = (this - that) / 36e5;\n break; // 1000 * 60 * 60\n case 'day':\n output = (this - that - zoneDelta) / 864e5;\n break; // 1000 * 60 * 60 * 24, negate dst\n case 'week':\n output = (this - that - zoneDelta) / 6048e5;\n break; // 1000 * 60 * 60 * 24 * 7, negate dst\n default:\n output = this - that;\n }\n\n return asFloat ? output : absFloor(output);\n }\n\n function monthDiff(a, b) {\n if (a.date() < b.date()) {\n // end-of-month calculations work correct when the start month has more\n // days than the end month.\n return -monthDiff(b, a);\n }\n // difference in months\n var wholeMonthDiff = (b.year() - a.year()) * 12 + (b.month() - a.month()),\n // b is in (anchor - 1 month, anchor + 1 month)\n anchor = a.clone().add(wholeMonthDiff, 'months'),\n anchor2,\n adjust;\n\n if (b - anchor < 0) {\n anchor2 = a.clone().add(wholeMonthDiff - 1, 'months');\n // linear across the month\n adjust = (b - anchor) / (anchor - anchor2);\n } else {\n anchor2 = a.clone().add(wholeMonthDiff + 1, 'months');\n // linear across the month\n adjust = (b - anchor) / (anchor2 - anchor);\n }\n\n //check for negative zero, return zero if negative zero\n return -(wholeMonthDiff + adjust) || 0;\n }\n\n hooks.defaultFormat = 'YYYY-MM-DDTHH:mm:ssZ';\n hooks.defaultFormatUtc = 'YYYY-MM-DDTHH:mm:ss[Z]';\n\n function toString() {\n return this.clone().locale('en').format('ddd MMM DD YYYY HH:mm:ss [GMT]ZZ');\n }\n\n function toISOString(keepOffset) {\n if (!this.isValid()) {\n return null;\n }\n var utc = keepOffset !== true,\n m = utc ? this.clone().utc() : this;\n if (m.year() < 0 || m.year() > 9999) {\n return formatMoment(\n m,\n utc\n ? 'YYYYYY-MM-DD[T]HH:mm:ss.SSS[Z]'\n : 'YYYYYY-MM-DD[T]HH:mm:ss.SSSZ'\n );\n }\n if (isFunction(Date.prototype.toISOString)) {\n // native implementation is ~50x faster, use it when we can\n if (utc) {\n return this.toDate().toISOString();\n } else {\n return new Date(this.valueOf() + this.utcOffset() * 60 * 1000)\n .toISOString()\n .replace('Z', formatMoment(m, 'Z'));\n }\n }\n return formatMoment(\n m,\n utc ? 'YYYY-MM-DD[T]HH:mm:ss.SSS[Z]' : 'YYYY-MM-DD[T]HH:mm:ss.SSSZ'\n );\n }\n\n /**\n * Return a human readable representation of a moment that can\n * also be evaluated to get a new moment which is the same\n *\n * @link https://nodejs.org/dist/latest/docs/api/util.html#util_custom_inspect_function_on_objects\n */\n function inspect() {\n if (!this.isValid()) {\n return 'moment.invalid(/* ' + this._i + ' */)';\n }\n var func = 'moment',\n zone = '',\n prefix,\n year,\n datetime,\n suffix;\n if (!this.isLocal()) {\n func = this.utcOffset() === 0 ? 'moment.utc' : 'moment.parseZone';\n zone = 'Z';\n }\n prefix = '[' + func + '(\"]';\n year = 0 <= this.year() && this.year() <= 9999 ? 'YYYY' : 'YYYYYY';\n datetime = '-MM-DD[T]HH:mm:ss.SSS';\n suffix = zone + '[\")]';\n\n return this.format(prefix + year + datetime + suffix);\n }\n\n function format(inputString) {\n if (!inputString) {\n inputString = this.isUtc()\n ? hooks.defaultFormatUtc\n : hooks.defaultFormat;\n }\n var output = formatMoment(this, inputString);\n return this.localeData().postformat(output);\n }\n\n function from(time, withoutSuffix) {\n if (\n this.isValid() &&\n ((isMoment(time) && time.isValid()) || createLocal(time).isValid())\n ) {\n return createDuration({ to: this, from: time })\n .locale(this.locale())\n .humanize(!withoutSuffix);\n } else {\n return this.localeData().invalidDate();\n }\n }\n\n function fromNow(withoutSuffix) {\n return this.from(createLocal(), withoutSuffix);\n }\n\n function to(time, withoutSuffix) {\n if (\n this.isValid() &&\n ((isMoment(time) && time.isValid()) || createLocal(time).isValid())\n ) {\n return createDuration({ from: this, to: time })\n .locale(this.locale())\n .humanize(!withoutSuffix);\n } else {\n return this.localeData().invalidDate();\n }\n }\n\n function toNow(withoutSuffix) {\n return this.to(createLocal(), withoutSuffix);\n }\n\n // If passed a locale key, it will set the locale for this\n // instance. Otherwise, it will return the locale configuration\n // variables for this instance.\n function locale(key) {\n var newLocaleData;\n\n if (key === undefined) {\n return this._locale._abbr;\n } else {\n newLocaleData = getLocale(key);\n if (newLocaleData != null) {\n this._locale = newLocaleData;\n }\n return this;\n }\n }\n\n var lang = deprecate(\n 'moment().lang() is deprecated. Instead, use moment().localeData() to get the language configuration. Use moment().locale() to change languages.',\n function (key) {\n if (key === undefined) {\n return this.localeData();\n } else {\n return this.locale(key);\n }\n }\n );\n\n function localeData() {\n return this._locale;\n }\n\n var MS_PER_SECOND = 1000,\n MS_PER_MINUTE = 60 * MS_PER_SECOND,\n MS_PER_HOUR = 60 * MS_PER_MINUTE,\n MS_PER_400_YEARS = (365 * 400 + 97) * 24 * MS_PER_HOUR;\n\n // actual modulo - handles negative numbers (for dates before 1970):\n function mod$1(dividend, divisor) {\n return ((dividend % divisor) + divisor) % divisor;\n }\n\n function localStartOfDate(y, m, d) {\n // the date constructor remaps years 0-99 to 1900-1999\n if (y < 100 && y >= 0) {\n // preserve leap years using a full 400 year cycle, then reset\n return new Date(y + 400, m, d) - MS_PER_400_YEARS;\n } else {\n return new Date(y, m, d).valueOf();\n }\n }\n\n function utcStartOfDate(y, m, d) {\n // Date.UTC remaps years 0-99 to 1900-1999\n if (y < 100 && y >= 0) {\n // preserve leap years using a full 400 year cycle, then reset\n return Date.UTC(y + 400, m, d) - MS_PER_400_YEARS;\n } else {\n return Date.UTC(y, m, d);\n }\n }\n\n function startOf(units) {\n var time, startOfDate;\n units = normalizeUnits(units);\n if (units === undefined || units === 'millisecond' || !this.isValid()) {\n return this;\n }\n\n startOfDate = this._isUTC ? utcStartOfDate : localStartOfDate;\n\n switch (units) {\n case 'year':\n time = startOfDate(this.year(), 0, 1);\n break;\n case 'quarter':\n time = startOfDate(\n this.year(),\n this.month() - (this.month() % 3),\n 1\n );\n break;\n case 'month':\n time = startOfDate(this.year(), this.month(), 1);\n break;\n case 'week':\n time = startOfDate(\n this.year(),\n this.month(),\n this.date() - this.weekday()\n );\n break;\n case 'isoWeek':\n time = startOfDate(\n this.year(),\n this.month(),\n this.date() - (this.isoWeekday() - 1)\n );\n break;\n case 'day':\n case 'date':\n time = startOfDate(this.year(), this.month(), this.date());\n break;\n case 'hour':\n time = this._d.valueOf();\n time -= mod$1(\n time + (this._isUTC ? 0 : this.utcOffset() * MS_PER_MINUTE),\n MS_PER_HOUR\n );\n break;\n case 'minute':\n time = this._d.valueOf();\n time -= mod$1(time, MS_PER_MINUTE);\n break;\n case 'second':\n time = this._d.valueOf();\n time -= mod$1(time, MS_PER_SECOND);\n break;\n }\n\n this._d.setTime(time);\n hooks.updateOffset(this, true);\n return this;\n }\n\n function endOf(units) {\n var time, startOfDate;\n units = normalizeUnits(units);\n if (units === undefined || units === 'millisecond' || !this.isValid()) {\n return this;\n }\n\n startOfDate = this._isUTC ? utcStartOfDate : localStartOfDate;\n\n switch (units) {\n case 'year':\n time = startOfDate(this.year() + 1, 0, 1) - 1;\n break;\n case 'quarter':\n time =\n startOfDate(\n this.year(),\n this.month() - (this.month() % 3) + 3,\n 1\n ) - 1;\n break;\n case 'month':\n time = startOfDate(this.year(), this.month() + 1, 1) - 1;\n break;\n case 'week':\n time =\n startOfDate(\n this.year(),\n this.month(),\n this.date() - this.weekday() + 7\n ) - 1;\n break;\n case 'isoWeek':\n time =\n startOfDate(\n this.year(),\n this.month(),\n this.date() - (this.isoWeekday() - 1) + 7\n ) - 1;\n break;\n case 'day':\n case 'date':\n time = startOfDate(this.year(), this.month(), this.date() + 1) - 1;\n break;\n case 'hour':\n time = this._d.valueOf();\n time +=\n MS_PER_HOUR -\n mod$1(\n time + (this._isUTC ? 0 : this.utcOffset() * MS_PER_MINUTE),\n MS_PER_HOUR\n ) -\n 1;\n break;\n case 'minute':\n time = this._d.valueOf();\n time += MS_PER_MINUTE - mod$1(time, MS_PER_MINUTE) - 1;\n break;\n case 'second':\n time = this._d.valueOf();\n time += MS_PER_SECOND - mod$1(time, MS_PER_SECOND) - 1;\n break;\n }\n\n this._d.setTime(time);\n hooks.updateOffset(this, true);\n return this;\n }\n\n function valueOf() {\n return this._d.valueOf() - (this._offset || 0) * 60000;\n }\n\n function unix() {\n return Math.floor(this.valueOf() / 1000);\n }\n\n function toDate() {\n return new Date(this.valueOf());\n }\n\n function toArray() {\n var m = this;\n return [\n m.year(),\n m.month(),\n m.date(),\n m.hour(),\n m.minute(),\n m.second(),\n m.millisecond(),\n ];\n }\n\n function toObject() {\n var m = this;\n return {\n years: m.year(),\n months: m.month(),\n date: m.date(),\n hours: m.hours(),\n minutes: m.minutes(),\n seconds: m.seconds(),\n milliseconds: m.milliseconds(),\n };\n }\n\n function toJSON() {\n // new Date(NaN).toJSON() === null\n return this.isValid() ? this.toISOString() : null;\n }\n\n function isValid$2() {\n return isValid(this);\n }\n\n function parsingFlags() {\n return extend({}, getParsingFlags(this));\n }\n\n function invalidAt() {\n return getParsingFlags(this).overflow;\n }\n\n function creationData() {\n return {\n input: this._i,\n format: this._f,\n locale: this._locale,\n isUTC: this._isUTC,\n strict: this._strict,\n };\n }\n\n addFormatToken('N', 0, 0, 'eraAbbr');\n addFormatToken('NN', 0, 0, 'eraAbbr');\n addFormatToken('NNN', 0, 0, 'eraAbbr');\n addFormatToken('NNNN', 0, 0, 'eraName');\n addFormatToken('NNNNN', 0, 0, 'eraNarrow');\n\n addFormatToken('y', ['y', 1], 'yo', 'eraYear');\n addFormatToken('y', ['yy', 2], 0, 'eraYear');\n addFormatToken('y', ['yyy', 3], 0, 'eraYear');\n addFormatToken('y', ['yyyy', 4], 0, 'eraYear');\n\n addRegexToken('N', matchEraAbbr);\n addRegexToken('NN', matchEraAbbr);\n addRegexToken('NNN', matchEraAbbr);\n addRegexToken('NNNN', matchEraName);\n addRegexToken('NNNNN', matchEraNarrow);\n\n addParseToken(\n ['N', 'NN', 'NNN', 'NNNN', 'NNNNN'],\n function (input, array, config, token) {\n var era = config._locale.erasParse(input, token, config._strict);\n if (era) {\n getParsingFlags(config).era = era;\n } else {\n getParsingFlags(config).invalidEra = input;\n }\n }\n );\n\n addRegexToken('y', matchUnsigned);\n addRegexToken('yy', matchUnsigned);\n addRegexToken('yyy', matchUnsigned);\n addRegexToken('yyyy', matchUnsigned);\n addRegexToken('yo', matchEraYearOrdinal);\n\n addParseToken(['y', 'yy', 'yyy', 'yyyy'], YEAR);\n addParseToken(['yo'], function (input, array, config, token) {\n var match;\n if (config._locale._eraYearOrdinalRegex) {\n match = input.match(config._locale._eraYearOrdinalRegex);\n }\n\n if (config._locale.eraYearOrdinalParse) {\n array[YEAR] = config._locale.eraYearOrdinalParse(input, match);\n } else {\n array[YEAR] = parseInt(input, 10);\n }\n });\n\n function localeEras(m, format) {\n var i,\n l,\n date,\n eras = this._eras || getLocale('en')._eras;\n for (i = 0, l = eras.length; i < l; ++i) {\n switch (typeof eras[i].since) {\n case 'string':\n // truncate time\n date = hooks(eras[i].since).startOf('day');\n eras[i].since = date.valueOf();\n break;\n }\n\n switch (typeof eras[i].until) {\n case 'undefined':\n eras[i].until = +Infinity;\n break;\n case 'string':\n // truncate time\n date = hooks(eras[i].until).startOf('day').valueOf();\n eras[i].until = date.valueOf();\n break;\n }\n }\n return eras;\n }\n\n function localeErasParse(eraName, format, strict) {\n var i,\n l,\n eras = this.eras(),\n name,\n abbr,\n narrow;\n eraName = eraName.toUpperCase();\n\n for (i = 0, l = eras.length; i < l; ++i) {\n name = eras[i].name.toUpperCase();\n abbr = eras[i].abbr.toUpperCase();\n narrow = eras[i].narrow.toUpperCase();\n\n if (strict) {\n switch (format) {\n case 'N':\n case 'NN':\n case 'NNN':\n if (abbr === eraName) {\n return eras[i];\n }\n break;\n\n case 'NNNN':\n if (name === eraName) {\n return eras[i];\n }\n break;\n\n case 'NNNNN':\n if (narrow === eraName) {\n return eras[i];\n }\n break;\n }\n } else if ([name, abbr, narrow].indexOf(eraName) >= 0) {\n return eras[i];\n }\n }\n }\n\n function localeErasConvertYear(era, year) {\n var dir = era.since <= era.until ? +1 : -1;\n if (year === undefined) {\n return hooks(era.since).year();\n } else {\n return hooks(era.since).year() + (year - era.offset) * dir;\n }\n }\n\n function getEraName() {\n var i,\n l,\n val,\n eras = this.localeData().eras();\n for (i = 0, l = eras.length; i < l; ++i) {\n // truncate time\n val = this.clone().startOf('day').valueOf();\n\n if (eras[i].since <= val && val <= eras[i].until) {\n return eras[i].name;\n }\n if (eras[i].until <= val && val <= eras[i].since) {\n return eras[i].name;\n }\n }\n\n return '';\n }\n\n function getEraNarrow() {\n var i,\n l,\n val,\n eras = this.localeData().eras();\n for (i = 0, l = eras.length; i < l; ++i) {\n // truncate time\n val = this.clone().startOf('day').valueOf();\n\n if (eras[i].since <= val && val <= eras[i].until) {\n return eras[i].narrow;\n }\n if (eras[i].until <= val && val <= eras[i].since) {\n return eras[i].narrow;\n }\n }\n\n return '';\n }\n\n function getEraAbbr() {\n var i,\n l,\n val,\n eras = this.localeData().eras();\n for (i = 0, l = eras.length; i < l; ++i) {\n // truncate time\n val = this.clone().startOf('day').valueOf();\n\n if (eras[i].since <= val && val <= eras[i].until) {\n return eras[i].abbr;\n }\n if (eras[i].until <= val && val <= eras[i].since) {\n return eras[i].abbr;\n }\n }\n\n return '';\n }\n\n function getEraYear() {\n var i,\n l,\n dir,\n val,\n eras = this.localeData().eras();\n for (i = 0, l = eras.length; i < l; ++i) {\n dir = eras[i].since <= eras[i].until ? +1 : -1;\n\n // truncate time\n val = this.clone().startOf('day').valueOf();\n\n if (\n (eras[i].since <= val && val <= eras[i].until) ||\n (eras[i].until <= val && val <= eras[i].since)\n ) {\n return (\n (this.year() - hooks(eras[i].since).year()) * dir +\n eras[i].offset\n );\n }\n }\n\n return this.year();\n }\n\n function erasNameRegex(isStrict) {\n if (!hasOwnProp(this, '_erasNameRegex')) {\n computeErasParse.call(this);\n }\n return isStrict ? this._erasNameRegex : this._erasRegex;\n }\n\n function erasAbbrRegex(isStrict) {\n if (!hasOwnProp(this, '_erasAbbrRegex')) {\n computeErasParse.call(this);\n }\n return isStrict ? this._erasAbbrRegex : this._erasRegex;\n }\n\n function erasNarrowRegex(isStrict) {\n if (!hasOwnProp(this, '_erasNarrowRegex')) {\n computeErasParse.call(this);\n }\n return isStrict ? this._erasNarrowRegex : this._erasRegex;\n }\n\n function matchEraAbbr(isStrict, locale) {\n return locale.erasAbbrRegex(isStrict);\n }\n\n function matchEraName(isStrict, locale) {\n return locale.erasNameRegex(isStrict);\n }\n\n function matchEraNarrow(isStrict, locale) {\n return locale.erasNarrowRegex(isStrict);\n }\n\n function matchEraYearOrdinal(isStrict, locale) {\n return locale._eraYearOrdinalRegex || matchUnsigned;\n }\n\n function computeErasParse() {\n var abbrPieces = [],\n namePieces = [],\n narrowPieces = [],\n mixedPieces = [],\n i,\n l,\n eras = this.eras();\n\n for (i = 0, l = eras.length; i < l; ++i) {\n namePieces.push(regexEscape(eras[i].name));\n abbrPieces.push(regexEscape(eras[i].abbr));\n narrowPieces.push(regexEscape(eras[i].narrow));\n\n mixedPieces.push(regexEscape(eras[i].name));\n mixedPieces.push(regexEscape(eras[i].abbr));\n mixedPieces.push(regexEscape(eras[i].narrow));\n }\n\n this._erasRegex = new RegExp('^(' + mixedPieces.join('|') + ')', 'i');\n this._erasNameRegex = new RegExp('^(' + namePieces.join('|') + ')', 'i');\n this._erasAbbrRegex = new RegExp('^(' + abbrPieces.join('|') + ')', 'i');\n this._erasNarrowRegex = new RegExp(\n '^(' + narrowPieces.join('|') + ')',\n 'i'\n );\n }\n\n // FORMATTING\n\n addFormatToken(0, ['gg', 2], 0, function () {\n return this.weekYear() % 100;\n });\n\n addFormatToken(0, ['GG', 2], 0, function () {\n return this.isoWeekYear() % 100;\n });\n\n function addWeekYearFormatToken(token, getter) {\n addFormatToken(0, [token, token.length], 0, getter);\n }\n\n addWeekYearFormatToken('gggg', 'weekYear');\n addWeekYearFormatToken('ggggg', 'weekYear');\n addWeekYearFormatToken('GGGG', 'isoWeekYear');\n addWeekYearFormatToken('GGGGG', 'isoWeekYear');\n\n // ALIASES\n\n addUnitAlias('weekYear', 'gg');\n addUnitAlias('isoWeekYear', 'GG');\n\n // PRIORITY\n\n addUnitPriority('weekYear', 1);\n addUnitPriority('isoWeekYear', 1);\n\n // PARSING\n\n addRegexToken('G', matchSigned);\n addRegexToken('g', matchSigned);\n addRegexToken('GG', match1to2, match2);\n addRegexToken('gg', match1to2, match2);\n addRegexToken('GGGG', match1to4, match4);\n addRegexToken('gggg', match1to4, match4);\n addRegexToken('GGGGG', match1to6, match6);\n addRegexToken('ggggg', match1to6, match6);\n\n addWeekParseToken(\n ['gggg', 'ggggg', 'GGGG', 'GGGGG'],\n function (input, week, config, token) {\n week[token.substr(0, 2)] = toInt(input);\n }\n );\n\n addWeekParseToken(['gg', 'GG'], function (input, week, config, token) {\n week[token] = hooks.parseTwoDigitYear(input);\n });\n\n // MOMENTS\n\n function getSetWeekYear(input) {\n return getSetWeekYearHelper.call(\n this,\n input,\n this.week(),\n this.weekday(),\n this.localeData()._week.dow,\n this.localeData()._week.doy\n );\n }\n\n function getSetISOWeekYear(input) {\n return getSetWeekYearHelper.call(\n this,\n input,\n this.isoWeek(),\n this.isoWeekday(),\n 1,\n 4\n );\n }\n\n function getISOWeeksInYear() {\n return weeksInYear(this.year(), 1, 4);\n }\n\n function getISOWeeksInISOWeekYear() {\n return weeksInYear(this.isoWeekYear(), 1, 4);\n }\n\n function getWeeksInYear() {\n var weekInfo = this.localeData()._week;\n return weeksInYear(this.year(), weekInfo.dow, weekInfo.doy);\n }\n\n function getWeeksInWeekYear() {\n var weekInfo = this.localeData()._week;\n return weeksInYear(this.weekYear(), weekInfo.dow, weekInfo.doy);\n }\n\n function getSetWeekYearHelper(input, week, weekday, dow, doy) {\n var weeksTarget;\n if (input == null) {\n return weekOfYear(this, dow, doy).year;\n } else {\n weeksTarget = weeksInYear(input, dow, doy);\n if (week > weeksTarget) {\n week = weeksTarget;\n }\n return setWeekAll.call(this, input, week, weekday, dow, doy);\n }\n }\n\n function setWeekAll(weekYear, week, weekday, dow, doy) {\n var dayOfYearData = dayOfYearFromWeeks(weekYear, week, weekday, dow, doy),\n date = createUTCDate(dayOfYearData.year, 0, dayOfYearData.dayOfYear);\n\n this.year(date.getUTCFullYear());\n this.month(date.getUTCMonth());\n this.date(date.getUTCDate());\n return this;\n }\n\n // FORMATTING\n\n addFormatToken('Q', 0, 'Qo', 'quarter');\n\n // ALIASES\n\n addUnitAlias('quarter', 'Q');\n\n // PRIORITY\n\n addUnitPriority('quarter', 7);\n\n // PARSING\n\n addRegexToken('Q', match1);\n addParseToken('Q', function (input, array) {\n array[MONTH] = (toInt(input) - 1) * 3;\n });\n\n // MOMENTS\n\n function getSetQuarter(input) {\n return input == null\n ? Math.ceil((this.month() + 1) / 3)\n : this.month((input - 1) * 3 + (this.month() % 3));\n }\n\n // FORMATTING\n\n addFormatToken('D', ['DD', 2], 'Do', 'date');\n\n // ALIASES\n\n addUnitAlias('date', 'D');\n\n // PRIORITY\n addUnitPriority('date', 9);\n\n // PARSING\n\n addRegexToken('D', match1to2);\n addRegexToken('DD', match1to2, match2);\n addRegexToken('Do', function (isStrict, locale) {\n // TODO: Remove \"ordinalParse\" fallback in next major release.\n return isStrict\n ? locale._dayOfMonthOrdinalParse || locale._ordinalParse\n : locale._dayOfMonthOrdinalParseLenient;\n });\n\n addParseToken(['D', 'DD'], DATE);\n addParseToken('Do', function (input, array) {\n array[DATE] = toInt(input.match(match1to2)[0]);\n });\n\n // MOMENTS\n\n var getSetDayOfMonth = makeGetSet('Date', true);\n\n // FORMATTING\n\n addFormatToken('DDD', ['DDDD', 3], 'DDDo', 'dayOfYear');\n\n // ALIASES\n\n addUnitAlias('dayOfYear', 'DDD');\n\n // PRIORITY\n addUnitPriority('dayOfYear', 4);\n\n // PARSING\n\n addRegexToken('DDD', match1to3);\n addRegexToken('DDDD', match3);\n addParseToken(['DDD', 'DDDD'], function (input, array, config) {\n config._dayOfYear = toInt(input);\n });\n\n // HELPERS\n\n // MOMENTS\n\n function getSetDayOfYear(input) {\n var dayOfYear =\n Math.round(\n (this.clone().startOf('day') - this.clone().startOf('year')) / 864e5\n ) + 1;\n return input == null ? dayOfYear : this.add(input - dayOfYear, 'd');\n }\n\n // FORMATTING\n\n addFormatToken('m', ['mm', 2], 0, 'minute');\n\n // ALIASES\n\n addUnitAlias('minute', 'm');\n\n // PRIORITY\n\n addUnitPriority('minute', 14);\n\n // PARSING\n\n addRegexToken('m', match1to2);\n addRegexToken('mm', match1to2, match2);\n addParseToken(['m', 'mm'], MINUTE);\n\n // MOMENTS\n\n var getSetMinute = makeGetSet('Minutes', false);\n\n // FORMATTING\n\n addFormatToken('s', ['ss', 2], 0, 'second');\n\n // ALIASES\n\n addUnitAlias('second', 's');\n\n // PRIORITY\n\n addUnitPriority('second', 15);\n\n // PARSING\n\n addRegexToken('s', match1to2);\n addRegexToken('ss', match1to2, match2);\n addParseToken(['s', 'ss'], SECOND);\n\n // MOMENTS\n\n var getSetSecond = makeGetSet('Seconds', false);\n\n // FORMATTING\n\n addFormatToken('S', 0, 0, function () {\n return ~~(this.millisecond() / 100);\n });\n\n addFormatToken(0, ['SS', 2], 0, function () {\n return ~~(this.millisecond() / 10);\n });\n\n addFormatToken(0, ['SSS', 3], 0, 'millisecond');\n addFormatToken(0, ['SSSS', 4], 0, function () {\n return this.millisecond() * 10;\n });\n addFormatToken(0, ['SSSSS', 5], 0, function () {\n return this.millisecond() * 100;\n });\n addFormatToken(0, ['SSSSSS', 6], 0, function () {\n return this.millisecond() * 1000;\n });\n addFormatToken(0, ['SSSSSSS', 7], 0, function () {\n return this.millisecond() * 10000;\n });\n addFormatToken(0, ['SSSSSSSS', 8], 0, function () {\n return this.millisecond() * 100000;\n });\n addFormatToken(0, ['SSSSSSSSS', 9], 0, function () {\n return this.millisecond() * 1000000;\n });\n\n // ALIASES\n\n addUnitAlias('millisecond', 'ms');\n\n // PRIORITY\n\n addUnitPriority('millisecond', 16);\n\n // PARSING\n\n addRegexToken('S', match1to3, match1);\n addRegexToken('SS', match1to3, match2);\n addRegexToken('SSS', match1to3, match3);\n\n var token, getSetMillisecond;\n for (token = 'SSSS'; token.length <= 9; token += 'S') {\n addRegexToken(token, matchUnsigned);\n }\n\n function parseMs(input, array) {\n array[MILLISECOND] = toInt(('0.' + input) * 1000);\n }\n\n for (token = 'S'; token.length <= 9; token += 'S') {\n addParseToken(token, parseMs);\n }\n\n getSetMillisecond = makeGetSet('Milliseconds', false);\n\n // FORMATTING\n\n addFormatToken('z', 0, 0, 'zoneAbbr');\n addFormatToken('zz', 0, 0, 'zoneName');\n\n // MOMENTS\n\n function getZoneAbbr() {\n return this._isUTC ? 'UTC' : '';\n }\n\n function getZoneName() {\n return this._isUTC ? 'Coordinated Universal Time' : '';\n }\n\n var proto = Moment.prototype;\n\n proto.add = add;\n proto.calendar = calendar$1;\n proto.clone = clone;\n proto.diff = diff;\n proto.endOf = endOf;\n proto.format = format;\n proto.from = from;\n proto.fromNow = fromNow;\n proto.to = to;\n proto.toNow = toNow;\n proto.get = stringGet;\n proto.invalidAt = invalidAt;\n proto.isAfter = isAfter;\n proto.isBefore = isBefore;\n proto.isBetween = isBetween;\n proto.isSame = isSame;\n proto.isSameOrAfter = isSameOrAfter;\n proto.isSameOrBefore = isSameOrBefore;\n proto.isValid = isValid$2;\n proto.lang = lang;\n proto.locale = locale;\n proto.localeData = localeData;\n proto.max = prototypeMax;\n proto.min = prototypeMin;\n proto.parsingFlags = parsingFlags;\n proto.set = stringSet;\n proto.startOf = startOf;\n proto.subtract = subtract;\n proto.toArray = toArray;\n proto.toObject = toObject;\n proto.toDate = toDate;\n proto.toISOString = toISOString;\n proto.inspect = inspect;\n if (typeof Symbol !== 'undefined' && Symbol.for != null) {\n proto[Symbol.for('nodejs.util.inspect.custom')] = function () {\n return 'Moment<' + this.format() + '>';\n };\n }\n proto.toJSON = toJSON;\n proto.toString = toString;\n proto.unix = unix;\n proto.valueOf = valueOf;\n proto.creationData = creationData;\n proto.eraName = getEraName;\n proto.eraNarrow = getEraNarrow;\n proto.eraAbbr = getEraAbbr;\n proto.eraYear = getEraYear;\n proto.year = getSetYear;\n proto.isLeapYear = getIsLeapYear;\n proto.weekYear = getSetWeekYear;\n proto.isoWeekYear = getSetISOWeekYear;\n proto.quarter = proto.quarters = getSetQuarter;\n proto.month = getSetMonth;\n proto.daysInMonth = getDaysInMonth;\n proto.week = proto.weeks = getSetWeek;\n proto.isoWeek = proto.isoWeeks = getSetISOWeek;\n proto.weeksInYear = getWeeksInYear;\n proto.weeksInWeekYear = getWeeksInWeekYear;\n proto.isoWeeksInYear = getISOWeeksInYear;\n proto.isoWeeksInISOWeekYear = getISOWeeksInISOWeekYear;\n proto.date = getSetDayOfMonth;\n proto.day = proto.days = getSetDayOfWeek;\n proto.weekday = getSetLocaleDayOfWeek;\n proto.isoWeekday = getSetISODayOfWeek;\n proto.dayOfYear = getSetDayOfYear;\n proto.hour = proto.hours = getSetHour;\n proto.minute = proto.minutes = getSetMinute;\n proto.second = proto.seconds = getSetSecond;\n proto.millisecond = proto.milliseconds = getSetMillisecond;\n proto.utcOffset = getSetOffset;\n proto.utc = setOffsetToUTC;\n proto.local = setOffsetToLocal;\n proto.parseZone = setOffsetToParsedOffset;\n proto.hasAlignedHourOffset = hasAlignedHourOffset;\n proto.isDST = isDaylightSavingTime;\n proto.isLocal = isLocal;\n proto.isUtcOffset = isUtcOffset;\n proto.isUtc = isUtc;\n proto.isUTC = isUtc;\n proto.zoneAbbr = getZoneAbbr;\n proto.zoneName = getZoneName;\n proto.dates = deprecate(\n 'dates accessor is deprecated. Use date instead.',\n getSetDayOfMonth\n );\n proto.months = deprecate(\n 'months accessor is deprecated. Use month instead',\n getSetMonth\n );\n proto.years = deprecate(\n 'years accessor is deprecated. Use year instead',\n getSetYear\n );\n proto.zone = deprecate(\n 'moment().zone is deprecated, use moment().utcOffset instead. http://momentjs.com/guides/#/warnings/zone/',\n getSetZone\n );\n proto.isDSTShifted = deprecate(\n 'isDSTShifted is deprecated. See http://momentjs.com/guides/#/warnings/dst-shifted/ for more information',\n isDaylightSavingTimeShifted\n );\n\n function createUnix(input) {\n return createLocal(input * 1000);\n }\n\n function createInZone() {\n return createLocal.apply(null, arguments).parseZone();\n }\n\n function preParsePostFormat(string) {\n return string;\n }\n\n var proto$1 = Locale.prototype;\n\n proto$1.calendar = calendar;\n proto$1.longDateFormat = longDateFormat;\n proto$1.invalidDate = invalidDate;\n proto$1.ordinal = ordinal;\n proto$1.preparse = preParsePostFormat;\n proto$1.postformat = preParsePostFormat;\n proto$1.relativeTime = relativeTime;\n proto$1.pastFuture = pastFuture;\n proto$1.set = set;\n proto$1.eras = localeEras;\n proto$1.erasParse = localeErasParse;\n proto$1.erasConvertYear = localeErasConvertYear;\n proto$1.erasAbbrRegex = erasAbbrRegex;\n proto$1.erasNameRegex = erasNameRegex;\n proto$1.erasNarrowRegex = erasNarrowRegex;\n\n proto$1.months = localeMonths;\n proto$1.monthsShort = localeMonthsShort;\n proto$1.monthsParse = localeMonthsParse;\n proto$1.monthsRegex = monthsRegex;\n proto$1.monthsShortRegex = monthsShortRegex;\n proto$1.week = localeWeek;\n proto$1.firstDayOfYear = localeFirstDayOfYear;\n proto$1.firstDayOfWeek = localeFirstDayOfWeek;\n\n proto$1.weekdays = localeWeekdays;\n proto$1.weekdaysMin = localeWeekdaysMin;\n proto$1.weekdaysShort = localeWeekdaysShort;\n proto$1.weekdaysParse = localeWeekdaysParse;\n\n proto$1.weekdaysRegex = weekdaysRegex;\n proto$1.weekdaysShortRegex = weekdaysShortRegex;\n proto$1.weekdaysMinRegex = weekdaysMinRegex;\n\n proto$1.isPM = localeIsPM;\n proto$1.meridiem = localeMeridiem;\n\n function get$1(format, index, field, setter) {\n var locale = getLocale(),\n utc = createUTC().set(setter, index);\n return locale[field](utc, format);\n }\n\n function listMonthsImpl(format, index, field) {\n if (isNumber(format)) {\n index = format;\n format = undefined;\n }\n\n format = format || '';\n\n if (index != null) {\n return get$1(format, index, field, 'month');\n }\n\n var i,\n out = [];\n for (i = 0; i < 12; i++) {\n out[i] = get$1(format, i, field, 'month');\n }\n return out;\n }\n\n // ()\n // (5)\n // (fmt, 5)\n // (fmt)\n // (true)\n // (true, 5)\n // (true, fmt, 5)\n // (true, fmt)\n function listWeekdaysImpl(localeSorted, format, index, field) {\n if (typeof localeSorted === 'boolean') {\n if (isNumber(format)) {\n index = format;\n format = undefined;\n }\n\n format = format || '';\n } else {\n format = localeSorted;\n index = format;\n localeSorted = false;\n\n if (isNumber(format)) {\n index = format;\n format = undefined;\n }\n\n format = format || '';\n }\n\n var locale = getLocale(),\n shift = localeSorted ? locale._week.dow : 0,\n i,\n out = [];\n\n if (index != null) {\n return get$1(format, (index + shift) % 7, field, 'day');\n }\n\n for (i = 0; i < 7; i++) {\n out[i] = get$1(format, (i + shift) % 7, field, 'day');\n }\n return out;\n }\n\n function listMonths(format, index) {\n return listMonthsImpl(format, index, 'months');\n }\n\n function listMonthsShort(format, index) {\n return listMonthsImpl(format, index, 'monthsShort');\n }\n\n function listWeekdays(localeSorted, format, index) {\n return listWeekdaysImpl(localeSorted, format, index, 'weekdays');\n }\n\n function listWeekdaysShort(localeSorted, format, index) {\n return listWeekdaysImpl(localeSorted, format, index, 'weekdaysShort');\n }\n\n function listWeekdaysMin(localeSorted, format, index) {\n return listWeekdaysImpl(localeSorted, format, index, 'weekdaysMin');\n }\n\n getSetGlobalLocale('en', {\n eras: [\n {\n since: '0001-01-01',\n until: +Infinity,\n offset: 1,\n name: 'Anno Domini',\n narrow: 'AD',\n abbr: 'AD',\n },\n {\n since: '0000-12-31',\n until: -Infinity,\n offset: 1,\n name: 'Before Christ',\n narrow: 'BC',\n abbr: 'BC',\n },\n ],\n dayOfMonthOrdinalParse: /\\d{1,2}(th|st|nd|rd)/,\n ordinal: function (number) {\n var b = number % 10,\n output =\n toInt((number % 100) / 10) === 1\n ? 'th'\n : b === 1\n ? 'st'\n : b === 2\n ? 'nd'\n : b === 3\n ? 'rd'\n : 'th';\n return number + output;\n },\n });\n\n // Side effect imports\n\n hooks.lang = deprecate(\n 'moment.lang is deprecated. Use moment.locale instead.',\n getSetGlobalLocale\n );\n hooks.langData = deprecate(\n 'moment.langData is deprecated. Use moment.localeData instead.',\n getLocale\n );\n\n var mathAbs = Math.abs;\n\n function abs() {\n var data = this._data;\n\n this._milliseconds = mathAbs(this._milliseconds);\n this._days = mathAbs(this._days);\n this._months = mathAbs(this._months);\n\n data.milliseconds = mathAbs(data.milliseconds);\n data.seconds = mathAbs(data.seconds);\n data.minutes = mathAbs(data.minutes);\n data.hours = mathAbs(data.hours);\n data.months = mathAbs(data.months);\n data.years = mathAbs(data.years);\n\n return this;\n }\n\n function addSubtract$1(duration, input, value, direction) {\n var other = createDuration(input, value);\n\n duration._milliseconds += direction * other._milliseconds;\n duration._days += direction * other._days;\n duration._months += direction * other._months;\n\n return duration._bubble();\n }\n\n // supports only 2.0-style add(1, 's') or add(duration)\n function add$1(input, value) {\n return addSubtract$1(this, input, value, 1);\n }\n\n // supports only 2.0-style subtract(1, 's') or subtract(duration)\n function subtract$1(input, value) {\n return addSubtract$1(this, input, value, -1);\n }\n\n function absCeil(number) {\n if (number < 0) {\n return Math.floor(number);\n } else {\n return Math.ceil(number);\n }\n }\n\n function bubble() {\n var milliseconds = this._milliseconds,\n days = this._days,\n months = this._months,\n data = this._data,\n seconds,\n minutes,\n hours,\n years,\n monthsFromDays;\n\n // if we have a mix of positive and negative values, bubble down first\n // check: https://github.com/moment/moment/issues/2166\n if (\n !(\n (milliseconds >= 0 && days >= 0 && months >= 0) ||\n (milliseconds <= 0 && days <= 0 && months <= 0)\n )\n ) {\n milliseconds += absCeil(monthsToDays(months) + days) * 864e5;\n days = 0;\n months = 0;\n }\n\n // The following code bubbles up values, see the tests for\n // examples of what that means.\n data.milliseconds = milliseconds % 1000;\n\n seconds = absFloor(milliseconds / 1000);\n data.seconds = seconds % 60;\n\n minutes = absFloor(seconds / 60);\n data.minutes = minutes % 60;\n\n hours = absFloor(minutes / 60);\n data.hours = hours % 24;\n\n days += absFloor(hours / 24);\n\n // convert days to months\n monthsFromDays = absFloor(daysToMonths(days));\n months += monthsFromDays;\n days -= absCeil(monthsToDays(monthsFromDays));\n\n // 12 months -> 1 year\n years = absFloor(months / 12);\n months %= 12;\n\n data.days = days;\n data.months = months;\n data.years = years;\n\n return this;\n }\n\n function daysToMonths(days) {\n // 400 years have 146097 days (taking into account leap year rules)\n // 400 years have 12 months === 4800\n return (days * 4800) / 146097;\n }\n\n function monthsToDays(months) {\n // the reverse of daysToMonths\n return (months * 146097) / 4800;\n }\n\n function as(units) {\n if (!this.isValid()) {\n return NaN;\n }\n var days,\n months,\n milliseconds = this._milliseconds;\n\n units = normalizeUnits(units);\n\n if (units === 'month' || units === 'quarter' || units === 'year') {\n days = this._days + milliseconds / 864e5;\n months = this._months + daysToMonths(days);\n switch (units) {\n case 'month':\n return months;\n case 'quarter':\n return months / 3;\n case 'year':\n return months / 12;\n }\n } else {\n // handle milliseconds separately because of floating point math errors (issue #1867)\n days = this._days + Math.round(monthsToDays(this._months));\n switch (units) {\n case 'week':\n return days / 7 + milliseconds / 6048e5;\n case 'day':\n return days + milliseconds / 864e5;\n case 'hour':\n return days * 24 + milliseconds / 36e5;\n case 'minute':\n return days * 1440 + milliseconds / 6e4;\n case 'second':\n return days * 86400 + milliseconds / 1000;\n // Math.floor prevents floating point math errors here\n case 'millisecond':\n return Math.floor(days * 864e5) + milliseconds;\n default:\n throw new Error('Unknown unit ' + units);\n }\n }\n }\n\n // TODO: Use this.as('ms')?\n function valueOf$1() {\n if (!this.isValid()) {\n return NaN;\n }\n return (\n this._milliseconds +\n this._days * 864e5 +\n (this._months % 12) * 2592e6 +\n toInt(this._months / 12) * 31536e6\n );\n }\n\n function makeAs(alias) {\n return function () {\n return this.as(alias);\n };\n }\n\n var asMilliseconds = makeAs('ms'),\n asSeconds = makeAs('s'),\n asMinutes = makeAs('m'),\n asHours = makeAs('h'),\n asDays = makeAs('d'),\n asWeeks = makeAs('w'),\n asMonths = makeAs('M'),\n asQuarters = makeAs('Q'),\n asYears = makeAs('y');\n\n function clone$1() {\n return createDuration(this);\n }\n\n function get$2(units) {\n units = normalizeUnits(units);\n return this.isValid() ? this[units + 's']() : NaN;\n }\n\n function makeGetter(name) {\n return function () {\n return this.isValid() ? this._data[name] : NaN;\n };\n }\n\n var milliseconds = makeGetter('milliseconds'),\n seconds = makeGetter('seconds'),\n minutes = makeGetter('minutes'),\n hours = makeGetter('hours'),\n days = makeGetter('days'),\n months = makeGetter('months'),\n years = makeGetter('years');\n\n function weeks() {\n return absFloor(this.days() / 7);\n }\n\n var round = Math.round,\n thresholds = {\n ss: 44, // a few seconds to seconds\n s: 45, // seconds to minute\n m: 45, // minutes to hour\n h: 22, // hours to day\n d: 26, // days to month/week\n w: null, // weeks to month\n M: 11, // months to year\n };\n\n // helper function for moment.fn.from, moment.fn.fromNow, and moment.duration.fn.humanize\n function substituteTimeAgo(string, number, withoutSuffix, isFuture, locale) {\n return locale.relativeTime(number || 1, !!withoutSuffix, string, isFuture);\n }\n\n function relativeTime$1(posNegDuration, withoutSuffix, thresholds, locale) {\n var duration = createDuration(posNegDuration).abs(),\n seconds = round(duration.as('s')),\n minutes = round(duration.as('m')),\n hours = round(duration.as('h')),\n days = round(duration.as('d')),\n months = round(duration.as('M')),\n weeks = round(duration.as('w')),\n years = round(duration.as('y')),\n a =\n (seconds <= thresholds.ss && ['s', seconds]) ||\n (seconds < thresholds.s && ['ss', seconds]) ||\n (minutes <= 1 && ['m']) ||\n (minutes < thresholds.m && ['mm', minutes]) ||\n (hours <= 1 && ['h']) ||\n (hours < thresholds.h && ['hh', hours]) ||\n (days <= 1 && ['d']) ||\n (days < thresholds.d && ['dd', days]);\n\n if (thresholds.w != null) {\n a =\n a ||\n (weeks <= 1 && ['w']) ||\n (weeks < thresholds.w && ['ww', weeks]);\n }\n a = a ||\n (months <= 1 && ['M']) ||\n (months < thresholds.M && ['MM', months]) ||\n (years <= 1 && ['y']) || ['yy', years];\n\n a[2] = withoutSuffix;\n a[3] = +posNegDuration > 0;\n a[4] = locale;\n return substituteTimeAgo.apply(null, a);\n }\n\n // This function allows you to set the rounding function for relative time strings\n function getSetRelativeTimeRounding(roundingFunction) {\n if (roundingFunction === undefined) {\n return round;\n }\n if (typeof roundingFunction === 'function') {\n round = roundingFunction;\n return true;\n }\n return false;\n }\n\n // This function allows you to set a threshold for relative time strings\n function getSetRelativeTimeThreshold(threshold, limit) {\n if (thresholds[threshold] === undefined) {\n return false;\n }\n if (limit === undefined) {\n return thresholds[threshold];\n }\n thresholds[threshold] = limit;\n if (threshold === 's') {\n thresholds.ss = limit - 1;\n }\n return true;\n }\n\n function humanize(argWithSuffix, argThresholds) {\n if (!this.isValid()) {\n return this.localeData().invalidDate();\n }\n\n var withSuffix = false,\n th = thresholds,\n locale,\n output;\n\n if (typeof argWithSuffix === 'object') {\n argThresholds = argWithSuffix;\n argWithSuffix = false;\n }\n if (typeof argWithSuffix === 'boolean') {\n withSuffix = argWithSuffix;\n }\n if (typeof argThresholds === 'object') {\n th = Object.assign({}, thresholds, argThresholds);\n if (argThresholds.s != null && argThresholds.ss == null) {\n th.ss = argThresholds.s - 1;\n }\n }\n\n locale = this.localeData();\n output = relativeTime$1(this, !withSuffix, th, locale);\n\n if (withSuffix) {\n output = locale.pastFuture(+this, output);\n }\n\n return locale.postformat(output);\n }\n\n var abs$1 = Math.abs;\n\n function sign(x) {\n return (x > 0) - (x < 0) || +x;\n }\n\n function toISOString$1() {\n // for ISO strings we do not use the normal bubbling rules:\n // * milliseconds bubble up until they become hours\n // * days do not bubble at all\n // * months bubble up until they become years\n // This is because there is no context-free conversion between hours and days\n // (think of clock changes)\n // and also not between days and months (28-31 days per month)\n if (!this.isValid()) {\n return this.localeData().invalidDate();\n }\n\n var seconds = abs$1(this._milliseconds) / 1000,\n days = abs$1(this._days),\n months = abs$1(this._months),\n minutes,\n hours,\n years,\n s,\n total = this.asSeconds(),\n totalSign,\n ymSign,\n daysSign,\n hmsSign;\n\n if (!total) {\n // this is the same as C#'s (Noda) and python (isodate)...\n // but not other JS (goog.date)\n return 'P0D';\n }\n\n // 3600 seconds -> 60 minutes -> 1 hour\n minutes = absFloor(seconds / 60);\n hours = absFloor(minutes / 60);\n seconds %= 60;\n minutes %= 60;\n\n // 12 months -> 1 year\n years = absFloor(months / 12);\n months %= 12;\n\n // inspired by https://github.com/dordille/moment-isoduration/blob/master/moment.isoduration.js\n s = seconds ? seconds.toFixed(3).replace(/\\.?0+$/, '') : '';\n\n totalSign = total < 0 ? '-' : '';\n ymSign = sign(this._months) !== sign(total) ? '-' : '';\n daysSign = sign(this._days) !== sign(total) ? '-' : '';\n hmsSign = sign(this._milliseconds) !== sign(total) ? '-' : '';\n\n return (\n totalSign +\n 'P' +\n (years ? ymSign + years + 'Y' : '') +\n (months ? ymSign + months + 'M' : '') +\n (days ? daysSign + days + 'D' : '') +\n (hours || minutes || seconds ? 'T' : '') +\n (hours ? hmsSign + hours + 'H' : '') +\n (minutes ? hmsSign + minutes + 'M' : '') +\n (seconds ? hmsSign + s + 'S' : '')\n );\n }\n\n var proto$2 = Duration.prototype;\n\n proto$2.isValid = isValid$1;\n proto$2.abs = abs;\n proto$2.add = add$1;\n proto$2.subtract = subtract$1;\n proto$2.as = as;\n proto$2.asMilliseconds = asMilliseconds;\n proto$2.asSeconds = asSeconds;\n proto$2.asMinutes = asMinutes;\n proto$2.asHours = asHours;\n proto$2.asDays = asDays;\n proto$2.asWeeks = asWeeks;\n proto$2.asMonths = asMonths;\n proto$2.asQuarters = asQuarters;\n proto$2.asYears = asYears;\n proto$2.valueOf = valueOf$1;\n proto$2._bubble = bubble;\n proto$2.clone = clone$1;\n proto$2.get = get$2;\n proto$2.milliseconds = milliseconds;\n proto$2.seconds = seconds;\n proto$2.minutes = minutes;\n proto$2.hours = hours;\n proto$2.days = days;\n proto$2.weeks = weeks;\n proto$2.months = months;\n proto$2.years = years;\n proto$2.humanize = humanize;\n proto$2.toISOString = toISOString$1;\n proto$2.toString = toISOString$1;\n proto$2.toJSON = toISOString$1;\n proto$2.locale = locale;\n proto$2.localeData = localeData;\n\n proto$2.toIsoString = deprecate(\n 'toIsoString() is deprecated. Please use toISOString() instead (notice the capitals)',\n toISOString$1\n );\n proto$2.lang = lang;\n\n // FORMATTING\n\n addFormatToken('X', 0, 0, 'unix');\n addFormatToken('x', 0, 0, 'valueOf');\n\n // PARSING\n\n addRegexToken('x', matchSigned);\n addRegexToken('X', matchTimestamp);\n addParseToken('X', function (input, array, config) {\n config._d = new Date(parseFloat(input) * 1000);\n });\n addParseToken('x', function (input, array, config) {\n config._d = new Date(toInt(input));\n });\n\n //! moment.js\n\n hooks.version = '2.29.4';\n\n setHookCallback(createLocal);\n\n hooks.fn = proto;\n hooks.min = min;\n hooks.max = max;\n hooks.now = now;\n hooks.utc = createUTC;\n hooks.unix = createUnix;\n hooks.months = listMonths;\n hooks.isDate = isDate;\n hooks.locale = getSetGlobalLocale;\n hooks.invalid = createInvalid;\n hooks.duration = createDuration;\n hooks.isMoment = isMoment;\n hooks.weekdays = listWeekdays;\n hooks.parseZone = createInZone;\n hooks.localeData = getLocale;\n hooks.isDuration = isDuration;\n hooks.monthsShort = listMonthsShort;\n hooks.weekdaysMin = listWeekdaysMin;\n hooks.defineLocale = defineLocale;\n hooks.updateLocale = updateLocale;\n hooks.locales = listLocales;\n hooks.weekdaysShort = listWeekdaysShort;\n hooks.normalizeUnits = normalizeUnits;\n hooks.relativeTimeRounding = getSetRelativeTimeRounding;\n hooks.relativeTimeThreshold = getSetRelativeTimeThreshold;\n hooks.calendarFormat = getCalendarFormat;\n hooks.prototype = proto;\n\n // currently HTML5 input type only supports 24-hour formats\n hooks.HTML5_FMT = {\n DATETIME_LOCAL: 'YYYY-MM-DDTHH:mm', // \n DATETIME_LOCAL_SECONDS: 'YYYY-MM-DDTHH:mm:ss', // \n DATETIME_LOCAL_MS: 'YYYY-MM-DDTHH:mm:ss.SSS', // \n DATE: 'YYYY-MM-DD', // \n TIME: 'HH:mm', // \n TIME_SECONDS: 'HH:mm:ss', // \n TIME_MS: 'HH:mm:ss.SSS', // \n WEEK: 'GGGG-[W]WW', // \n MONTH: 'YYYY-MM', // \n };\n\n return hooks;\n\n})));\n", "//! moment-timezone.js\n//! version : 0.5.37\n//! Copyright (c) JS Foundation and other contributors\n//! license : MIT\n//! github.com/moment/moment-timezone\n\n(function (root, factory) {\n\t\"use strict\";\n\n\t/*global define*/\n\tif (typeof module === 'object' && module.exports) {\n\t\tmodule.exports = factory(require('moment')); // Node\n\t} else if (typeof define === 'function' && define.amd) {\n\t\tdefine(['moment'], factory); // AMD\n\t} else {\n\t\tfactory(root.moment); // Browser\n\t}\n}(this, function (moment) {\n\t\"use strict\";\n\n\t// Resolves es6 module loading issue\n\tif (moment.version === undefined && moment.default) {\n\t\tmoment = moment.default;\n\t}\n\n\t// Do not load moment-timezone a second time.\n\t// if (moment.tz !== undefined) {\n\t// \tlogError('Moment Timezone ' + moment.tz.version + ' was already loaded ' + (moment.tz.dataVersion ? 'with data from ' : 'without any data') + moment.tz.dataVersion);\n\t// \treturn moment;\n\t// }\n\n\tvar VERSION = \"0.5.37\",\n\t\tzones = {},\n\t\tlinks = {},\n\t\tcountries = {},\n\t\tnames = {},\n\t\tguesses = {},\n\t\tcachedGuess;\n\n\tif (!moment || typeof moment.version !== 'string') {\n\t\tlogError('Moment Timezone requires Moment.js. See https://momentjs.com/timezone/docs/#/use-it/browser/');\n\t}\n\n\tvar momentVersion = moment.version.split('.'),\n\t\tmajor = +momentVersion[0],\n\t\tminor = +momentVersion[1];\n\n\t// Moment.js version check\n\tif (major < 2 || (major === 2 && minor < 6)) {\n\t\tlogError('Moment Timezone requires Moment.js >= 2.6.0. You are using Moment.js ' + moment.version + '. See momentjs.com');\n\t}\n\n\t/************************************\n\t\tUnpacking\n\t************************************/\n\n\tfunction charCodeToInt(charCode) {\n\t\tif (charCode > 96) {\n\t\t\treturn charCode - 87;\n\t\t} else if (charCode > 64) {\n\t\t\treturn charCode - 29;\n\t\t}\n\t\treturn charCode - 48;\n\t}\n\n\tfunction unpackBase60(string) {\n\t\tvar i = 0,\n\t\t\tparts = string.split('.'),\n\t\t\twhole = parts[0],\n\t\t\tfractional = parts[1] || '',\n\t\t\tmultiplier = 1,\n\t\t\tnum,\n\t\t\tout = 0,\n\t\t\tsign = 1;\n\n\t\t// handle negative numbers\n\t\tif (string.charCodeAt(0) === 45) {\n\t\t\ti = 1;\n\t\t\tsign = -1;\n\t\t}\n\n\t\t// handle digits before the decimal\n\t\tfor (i; i < whole.length; i++) {\n\t\t\tnum = charCodeToInt(whole.charCodeAt(i));\n\t\t\tout = 60 * out + num;\n\t\t}\n\n\t\t// handle digits after the decimal\n\t\tfor (i = 0; i < fractional.length; i++) {\n\t\t\tmultiplier = multiplier / 60;\n\t\t\tnum = charCodeToInt(fractional.charCodeAt(i));\n\t\t\tout += num * multiplier;\n\t\t}\n\n\t\treturn out * sign;\n\t}\n\n\tfunction arrayToInt (array) {\n\t\tfor (var i = 0; i < array.length; i++) {\n\t\t\tarray[i] = unpackBase60(array[i]);\n\t\t}\n\t}\n\n\tfunction intToUntil (array, length) {\n\t\tfor (var i = 0; i < length; i++) {\n\t\t\tarray[i] = Math.round((array[i - 1] || 0) + (array[i] * 60000)); // minutes to milliseconds\n\t\t}\n\n\t\tarray[length - 1] = Infinity;\n\t}\n\n\tfunction mapIndices (source, indices) {\n\t\tvar out = [], i;\n\n\t\tfor (i = 0; i < indices.length; i++) {\n\t\t\tout[i] = source[indices[i]];\n\t\t}\n\n\t\treturn out;\n\t}\n\n\tfunction unpack (string) {\n\t\tvar data = string.split('|'),\n\t\t\toffsets = data[2].split(' '),\n\t\t\tindices = data[3].split(''),\n\t\t\tuntils = data[4].split(' ');\n\n\t\tarrayToInt(offsets);\n\t\tarrayToInt(indices);\n\t\tarrayToInt(untils);\n\n\t\tintToUntil(untils, indices.length);\n\n\t\treturn {\n\t\t\tname : data[0],\n\t\t\tabbrs : mapIndices(data[1].split(' '), indices),\n\t\t\toffsets : mapIndices(offsets, indices),\n\t\t\tuntils : untils,\n\t\t\tpopulation : data[5] | 0\n\t\t};\n\t}\n\n\t/************************************\n\t\tZone object\n\t************************************/\n\n\tfunction Zone (packedString) {\n\t\tif (packedString) {\n\t\t\tthis._set(unpack(packedString));\n\t\t}\n\t}\n\n\tZone.prototype = {\n\t\t_set : function (unpacked) {\n\t\t\tthis.name = unpacked.name;\n\t\t\tthis.abbrs = unpacked.abbrs;\n\t\t\tthis.untils = unpacked.untils;\n\t\t\tthis.offsets = unpacked.offsets;\n\t\t\tthis.population = unpacked.population;\n\t\t},\n\n\t\t_index : function (timestamp) {\n\t\t\tvar target = +timestamp,\n\t\t\t\tuntils = this.untils,\n\t\t\t\ti;\n\n\t\t\tfor (i = 0; i < untils.length; i++) {\n\t\t\t\tif (target < untils[i]) {\n\t\t\t\t\treturn i;\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\n\t\tcountries : function () {\n\t\t\tvar zone_name = this.name;\n\t\t\treturn Object.keys(countries).filter(function (country_code) {\n\t\t\t\treturn countries[country_code].zones.indexOf(zone_name) !== -1;\n\t\t\t});\n\t\t},\n\n\t\tparse : function (timestamp) {\n\t\t\tvar target = +timestamp,\n\t\t\t\toffsets = this.offsets,\n\t\t\t\tuntils = this.untils,\n\t\t\t\tmax = untils.length - 1,\n\t\t\t\toffset, offsetNext, offsetPrev, i;\n\n\t\t\tfor (i = 0; i < max; i++) {\n\t\t\t\toffset = offsets[i];\n\t\t\t\toffsetNext = offsets[i + 1];\n\t\t\t\toffsetPrev = offsets[i ? i - 1 : i];\n\n\t\t\t\tif (offset < offsetNext && tz.moveAmbiguousForward) {\n\t\t\t\t\toffset = offsetNext;\n\t\t\t\t} else if (offset > offsetPrev && tz.moveInvalidForward) {\n\t\t\t\t\toffset = offsetPrev;\n\t\t\t\t}\n\n\t\t\t\tif (target < untils[i] - (offset * 60000)) {\n\t\t\t\t\treturn offsets[i];\n\t\t\t\t}\n\t\t\t}\n\n\t\t\treturn offsets[max];\n\t\t},\n\n\t\tabbr : function (mom) {\n\t\t\treturn this.abbrs[this._index(mom)];\n\t\t},\n\n\t\toffset : function (mom) {\n\t\t\tlogError(\"zone.offset has been deprecated in favor of zone.utcOffset\");\n\t\t\treturn this.offsets[this._index(mom)];\n\t\t},\n\n\t\tutcOffset : function (mom) {\n\t\t\treturn this.offsets[this._index(mom)];\n\t\t}\n\t};\n\n\t/************************************\n\t\tCountry object\n\t************************************/\n\n\tfunction Country (country_name, zone_names) {\n\t\tthis.name = country_name;\n\t\tthis.zones = zone_names;\n\t}\n\n\t/************************************\n\t\tCurrent Timezone\n\t************************************/\n\n\tfunction OffsetAt(at) {\n\t\tvar timeString = at.toTimeString();\n\t\tvar abbr = timeString.match(/\\([a-z ]+\\)/i);\n\t\tif (abbr && abbr[0]) {\n\t\t\t// 17:56:31 GMT-0600 (CST)\n\t\t\t// 17:56:31 GMT-0600 (Central Standard Time)\n\t\t\tabbr = abbr[0].match(/[A-Z]/g);\n\t\t\tabbr = abbr ? abbr.join('') : undefined;\n\t\t} else {\n\t\t\t// 17:56:31 CST\n\t\t\t// 17:56:31 GMT+0800 (\u53F0\u5317\u6A19\u6E96\u6642\u9593)\n\t\t\tabbr = timeString.match(/[A-Z]{3,5}/g);\n\t\t\tabbr = abbr ? abbr[0] : undefined;\n\t\t}\n\n\t\tif (abbr === 'GMT') {\n\t\t\tabbr = undefined;\n\t\t}\n\n\t\tthis.at = +at;\n\t\tthis.abbr = abbr;\n\t\tthis.offset = at.getTimezoneOffset();\n\t}\n\n\tfunction ZoneScore(zone) {\n\t\tthis.zone = zone;\n\t\tthis.offsetScore = 0;\n\t\tthis.abbrScore = 0;\n\t}\n\n\tZoneScore.prototype.scoreOffsetAt = function (offsetAt) {\n\t\tthis.offsetScore += Math.abs(this.zone.utcOffset(offsetAt.at) - offsetAt.offset);\n\t\tif (this.zone.abbr(offsetAt.at).replace(/[^A-Z]/g, '') !== offsetAt.abbr) {\n\t\t\tthis.abbrScore++;\n\t\t}\n\t};\n\n\tfunction findChange(low, high) {\n\t\tvar mid, diff;\n\n\t\twhile ((diff = ((high.at - low.at) / 12e4 | 0) * 6e4)) {\n\t\t\tmid = new OffsetAt(new Date(low.at + diff));\n\t\t\tif (mid.offset === low.offset) {\n\t\t\t\tlow = mid;\n\t\t\t} else {\n\t\t\t\thigh = mid;\n\t\t\t}\n\t\t}\n\n\t\treturn low;\n\t}\n\n\tfunction userOffsets() {\n\t\tvar startYear = new Date().getFullYear() - 2,\n\t\t\tlast = new OffsetAt(new Date(startYear, 0, 1)),\n\t\t\toffsets = [last],\n\t\t\tchange, next, i;\n\n\t\tfor (i = 1; i < 48; i++) {\n\t\t\tnext = new OffsetAt(new Date(startYear, i, 1));\n\t\t\tif (next.offset !== last.offset) {\n\t\t\t\tchange = findChange(last, next);\n\t\t\t\toffsets.push(change);\n\t\t\t\toffsets.push(new OffsetAt(new Date(change.at + 6e4)));\n\t\t\t}\n\t\t\tlast = next;\n\t\t}\n\n\t\tfor (i = 0; i < 4; i++) {\n\t\t\toffsets.push(new OffsetAt(new Date(startYear + i, 0, 1)));\n\t\t\toffsets.push(new OffsetAt(new Date(startYear + i, 6, 1)));\n\t\t}\n\n\t\treturn offsets;\n\t}\n\n\tfunction sortZoneScores (a, b) {\n\t\tif (a.offsetScore !== b.offsetScore) {\n\t\t\treturn a.offsetScore - b.offsetScore;\n\t\t}\n\t\tif (a.abbrScore !== b.abbrScore) {\n\t\t\treturn a.abbrScore - b.abbrScore;\n\t\t}\n\t\tif (a.zone.population !== b.zone.population) {\n\t\t\treturn b.zone.population - a.zone.population;\n\t\t}\n\t\treturn b.zone.name.localeCompare(a.zone.name);\n\t}\n\n\tfunction addToGuesses (name, offsets) {\n\t\tvar i, offset;\n\t\tarrayToInt(offsets);\n\t\tfor (i = 0; i < offsets.length; i++) {\n\t\t\toffset = offsets[i];\n\t\t\tguesses[offset] = guesses[offset] || {};\n\t\t\tguesses[offset][name] = true;\n\t\t}\n\t}\n\n\tfunction guessesForUserOffsets (offsets) {\n\t\tvar offsetsLength = offsets.length,\n\t\t\tfilteredGuesses = {},\n\t\t\tout = [],\n\t\t\ti, j, guessesOffset;\n\n\t\tfor (i = 0; i < offsetsLength; i++) {\n\t\t\tguessesOffset = guesses[offsets[i].offset] || {};\n\t\t\tfor (j in guessesOffset) {\n\t\t\t\tif (guessesOffset.hasOwnProperty(j)) {\n\t\t\t\t\tfilteredGuesses[j] = true;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tfor (i in filteredGuesses) {\n\t\t\tif (filteredGuesses.hasOwnProperty(i)) {\n\t\t\t\tout.push(names[i]);\n\t\t\t}\n\t\t}\n\n\t\treturn out;\n\t}\n\n\tfunction rebuildGuess () {\n\n\t\t// use Intl API when available and returning valid time zone\n\t\ttry {\n\t\t\tvar intlName = Intl.DateTimeFormat().resolvedOptions().timeZone;\n\t\t\tif (intlName && intlName.length > 3) {\n\t\t\t\tvar name = names[normalizeName(intlName)];\n\t\t\t\tif (name) {\n\t\t\t\t\treturn name;\n\t\t\t\t}\n\t\t\t\tlogError(\"Moment Timezone found \" + intlName + \" from the Intl api, but did not have that data loaded.\");\n\t\t\t}\n\t\t} catch (e) {\n\t\t\t// Intl unavailable, fall back to manual guessing.\n\t\t}\n\n\t\tvar offsets = userOffsets(),\n\t\t\toffsetsLength = offsets.length,\n\t\t\tguesses = guessesForUserOffsets(offsets),\n\t\t\tzoneScores = [],\n\t\t\tzoneScore, i, j;\n\n\t\tfor (i = 0; i < guesses.length; i++) {\n\t\t\tzoneScore = new ZoneScore(getZone(guesses[i]), offsetsLength);\n\t\t\tfor (j = 0; j < offsetsLength; j++) {\n\t\t\t\tzoneScore.scoreOffsetAt(offsets[j]);\n\t\t\t}\n\t\t\tzoneScores.push(zoneScore);\n\t\t}\n\n\t\tzoneScores.sort(sortZoneScores);\n\n\t\treturn zoneScores.length > 0 ? zoneScores[0].zone.name : undefined;\n\t}\n\n\tfunction guess (ignoreCache) {\n\t\tif (!cachedGuess || ignoreCache) {\n\t\t\tcachedGuess = rebuildGuess();\n\t\t}\n\t\treturn cachedGuess;\n\t}\n\n\t/************************************\n\t\tGlobal Methods\n\t************************************/\n\n\tfunction normalizeName (name) {\n\t\treturn (name || '').toLowerCase().replace(/\\//g, '_');\n\t}\n\n\tfunction addZone (packed) {\n\t\tvar i, name, split, normalized;\n\n\t\tif (typeof packed === \"string\") {\n\t\t\tpacked = [packed];\n\t\t}\n\n\t\tfor (i = 0; i < packed.length; i++) {\n\t\t\tsplit = packed[i].split('|');\n\t\t\tname = split[0];\n\t\t\tnormalized = normalizeName(name);\n\t\t\tzones[normalized] = packed[i];\n\t\t\tnames[normalized] = name;\n\t\t\taddToGuesses(normalized, split[2].split(' '));\n\t\t}\n\t}\n\n\tfunction getZone (name, caller) {\n\n\t\tname = normalizeName(name);\n\n\t\tvar zone = zones[name];\n\t\tvar link;\n\n\t\tif (zone instanceof Zone) {\n\t\t\treturn zone;\n\t\t}\n\n\t\tif (typeof zone === 'string') {\n\t\t\tzone = new Zone(zone);\n\t\t\tzones[name] = zone;\n\t\t\treturn zone;\n\t\t}\n\n\t\t// Pass getZone to prevent recursion more than 1 level deep\n\t\tif (links[name] && caller !== getZone && (link = getZone(links[name], getZone))) {\n\t\t\tzone = zones[name] = new Zone();\n\t\t\tzone._set(link);\n\t\t\tzone.name = names[name];\n\t\t\treturn zone;\n\t\t}\n\n\t\treturn null;\n\t}\n\n\tfunction getNames () {\n\t\tvar i, out = [];\n\n\t\tfor (i in names) {\n\t\t\tif (names.hasOwnProperty(i) && (zones[i] || zones[links[i]]) && names[i]) {\n\t\t\t\tout.push(names[i]);\n\t\t\t}\n\t\t}\n\n\t\treturn out.sort();\n\t}\n\n\tfunction getCountryNames () {\n\t\treturn Object.keys(countries);\n\t}\n\n\tfunction addLink (aliases) {\n\t\tvar i, alias, normal0, normal1;\n\n\t\tif (typeof aliases === \"string\") {\n\t\t\taliases = [aliases];\n\t\t}\n\n\t\tfor (i = 0; i < aliases.length; i++) {\n\t\t\talias = aliases[i].split('|');\n\n\t\t\tnormal0 = normalizeName(alias[0]);\n\t\t\tnormal1 = normalizeName(alias[1]);\n\n\t\t\tlinks[normal0] = normal1;\n\t\t\tnames[normal0] = alias[0];\n\n\t\t\tlinks[normal1] = normal0;\n\t\t\tnames[normal1] = alias[1];\n\t\t}\n\t}\n\n\tfunction addCountries (data) {\n\t\tvar i, country_code, country_zones, split;\n\t\tif (!data || !data.length) return;\n\t\tfor (i = 0; i < data.length; i++) {\n\t\t\tsplit = data[i].split('|');\n\t\t\tcountry_code = split[0].toUpperCase();\n\t\t\tcountry_zones = split[1].split(' ');\n\t\t\tcountries[country_code] = new Country(\n\t\t\t\tcountry_code,\n\t\t\t\tcountry_zones\n\t\t\t);\n\t\t}\n\t}\n\n\tfunction getCountry (name) {\n\t\tname = name.toUpperCase();\n\t\treturn countries[name] || null;\n\t}\n\n\tfunction zonesForCountry(country, with_offset) {\n\t\tcountry = getCountry(country);\n\n\t\tif (!country) return null;\n\n\t\tvar zones = country.zones.sort();\n\n\t\tif (with_offset) {\n\t\t\treturn zones.map(function (zone_name) {\n\t\t\t\tvar zone = getZone(zone_name);\n\t\t\t\treturn {\n\t\t\t\t\tname: zone_name,\n\t\t\t\t\toffset: zone.utcOffset(new Date())\n\t\t\t\t};\n\t\t\t});\n\t\t}\n\n\t\treturn zones;\n\t}\n\n\tfunction loadData (data) {\n\t\taddZone(data.zones);\n\t\taddLink(data.links);\n\t\taddCountries(data.countries);\n\t\ttz.dataVersion = data.version;\n\t}\n\n\tfunction zoneExists (name) {\n\t\tif (!zoneExists.didShowError) {\n\t\t\tzoneExists.didShowError = true;\n\t\t\t\tlogError(\"moment.tz.zoneExists('\" + name + \"') has been deprecated in favor of !moment.tz.zone('\" + name + \"')\");\n\t\t}\n\t\treturn !!getZone(name);\n\t}\n\n\tfunction needsOffset (m) {\n\t\tvar isUnixTimestamp = (m._f === 'X' || m._f === 'x');\n\t\treturn !!(m._a && (m._tzm === undefined) && !isUnixTimestamp);\n\t}\n\n\tfunction logError (message) {\n\t\tif (typeof console !== 'undefined' && typeof console.error === 'function') {\n\t\t\tconsole.error(message);\n\t\t}\n\t}\n\n\t/************************************\n\t\tmoment.tz namespace\n\t************************************/\n\n\tfunction tz (input) {\n\t\tvar args = Array.prototype.slice.call(arguments, 0, -1),\n\t\t\tname = arguments[arguments.length - 1],\n\t\t\tzone = getZone(name),\n\t\t\tout = moment.utc.apply(null, args);\n\n\t\tif (zone && !moment.isMoment(input) && needsOffset(out)) {\n\t\t\tout.add(zone.parse(out), 'minutes');\n\t\t}\n\n\t\tout.tz(name);\n\n\t\treturn out;\n\t}\n\n\ttz.version = VERSION;\n\ttz.dataVersion = '';\n\ttz._zones = zones;\n\ttz._links = links;\n\ttz._names = names;\n\ttz._countries\t= countries;\n\ttz.add = addZone;\n\ttz.link = addLink;\n\ttz.load = loadData;\n\ttz.zone = getZone;\n\ttz.zoneExists = zoneExists; // deprecated in 0.1.0\n\ttz.guess = guess;\n\ttz.names = getNames;\n\ttz.Zone = Zone;\n\ttz.unpack = unpack;\n\ttz.unpackBase60 = unpackBase60;\n\ttz.needsOffset = needsOffset;\n\ttz.moveInvalidForward = true;\n\ttz.moveAmbiguousForward = false;\n\ttz.countries = getCountryNames;\n\ttz.zonesForCountry = zonesForCountry;\n\n\t/************************************\n\t\tInterface with Moment.js\n\t************************************/\n\n\tvar fn = moment.fn;\n\n\tmoment.tz = tz;\n\n\tmoment.defaultZone = null;\n\n\tmoment.updateOffset = function (mom, keepTime) {\n\t\tvar zone = moment.defaultZone,\n\t\t\toffset;\n\n\t\tif (mom._z === undefined) {\n\t\t\tif (zone && needsOffset(mom) && !mom._isUTC) {\n\t\t\t\tmom._d = moment.utc(mom._a)._d;\n\t\t\t\tmom.utc().add(zone.parse(mom), 'minutes');\n\t\t\t}\n\t\t\tmom._z = zone;\n\t\t}\n\t\tif (mom._z) {\n\t\t\toffset = mom._z.utcOffset(mom);\n\t\t\tif (Math.abs(offset) < 16) {\n\t\t\t\toffset = offset / 60;\n\t\t\t}\n\t\t\tif (mom.utcOffset !== undefined) {\n\t\t\t\tvar z = mom._z;\n\t\t\t\tmom.utcOffset(-offset, keepTime);\n\t\t\t\tmom._z = z;\n\t\t\t} else {\n\t\t\t\tmom.zone(offset, keepTime);\n\t\t\t}\n\t\t}\n\t};\n\n\tfn.tz = function (name, keepTime) {\n\t\tif (name) {\n\t\t\tif (typeof name !== 'string') {\n\t\t\t\tthrow new Error('Time zone name must be a string, got ' + name + ' [' + typeof name + ']');\n\t\t\t}\n\t\t\tthis._z = getZone(name);\n\t\t\tif (this._z) {\n\t\t\t\tmoment.updateOffset(this, keepTime);\n\t\t\t} else {\n\t\t\t\tlogError(\"Moment Timezone has no data for \" + name + \". See http://momentjs.com/timezone/docs/#/data-loading/.\");\n\t\t\t}\n\t\t\treturn this;\n\t\t}\n\t\tif (this._z) { return this._z.name; }\n\t};\n\n\tfunction abbrWrap (old) {\n\t\treturn function () {\n\t\t\tif (this._z) { return this._z.abbr(this); }\n\t\t\treturn old.call(this);\n\t\t};\n\t}\n\n\tfunction resetZoneWrap (old) {\n\t\treturn function () {\n\t\t\tthis._z = null;\n\t\t\treturn old.apply(this, arguments);\n\t\t};\n\t}\n\n\tfunction resetZoneWrap2 (old) {\n\t\treturn function () {\n\t\t\tif (arguments.length > 0) this._z = null;\n\t\t\treturn old.apply(this, arguments);\n\t\t};\n\t}\n\n\tfn.zoneName = abbrWrap(fn.zoneName);\n\tfn.zoneAbbr = abbrWrap(fn.zoneAbbr);\n\tfn.utc = resetZoneWrap(fn.utc);\n\tfn.local = resetZoneWrap(fn.local);\n\tfn.utcOffset = resetZoneWrap2(fn.utcOffset);\n\n\tmoment.tz.setDefault = function(name) {\n\t\tif (major < 2 || (major === 2 && minor < 9)) {\n\t\t\tlogError('Moment Timezone setDefault() requires Moment.js >= 2.9.0. You are using Moment.js ' + moment.version + '.');\n\t\t}\n\t\tmoment.defaultZone = name ? getZone(name) : null;\n\t\treturn moment;\n\t};\n\n\t// Cloning a moment should include the _z property.\n\tvar momentProperties = moment.momentProperties;\n\tif (Object.prototype.toString.call(momentProperties) === '[object Array]') {\n\t\t// moment 2.8.1+\n\t\tmomentProperties.push('_z');\n\t\tmomentProperties.push('_a');\n\t} else if (momentProperties) {\n\t\t// moment 2.7.0\n\t\tmomentProperties._z = null;\n\t}\n\n\t// INJECT DATA\n\n\treturn moment;\n}));\n", "var moment = module.exports = require(\"./moment-timezone\");\nmoment.tz.load(require('./data/packed/latest.json'));\n", "'use strict';\n\nObject.defineProperty(exports, '__esModule', { value: true });\n\nfunction objectToString (o) {\n return Object.prototype.toString.call(o)\n}\n\nfunction isObject (arg) {\n return typeof arg === 'object' && arg !== null\n}\n\nfunction isDate (d) {\n return isObject(d) && objectToString(d) === '[object Date]'\n}\n\n/**\n * pad number with `0`\n * @param {number} number\n * @param {number} [len] - length\n * @return {string} padded string\n */\nfunction pad0 (number, len) {\n len = len || 2;\n number = Array(len).join('0') + number.toString();\n return number.substr(number.length - len, len)\n}\n\n/**\n * convert string to number\n * @private\n * @param {String} str\n * @return {Number} converted number or undefined\n */\nfunction toNumber (str) {\n const num = parseInt(str, 10);\n if (!isNaN(num)) {\n return num\n }\n}\n\n/**\n * extract or set year\n * @private\n * @param {Number|Date|String} year\n * @return {Number} year\n */\nfunction toYear (year) {\n if (!year) {\n year = new Date().getFullYear();\n } else if (isDate(year)) {\n year = year.getFullYear();\n } else if (typeof year === 'string') {\n year = toNumber(year);\n }\n return year\n}\n\nexports.isDate = isDate;\nexports.isObject = isObject;\nexports.pad0 = pad0;\nexports.toNumber = toNumber;\nexports.toYear = toYear;\n", "'use strict';\n\nObject.defineProperty(exports, '__esModule', { value: true });\n\nvar moment = require('moment-timezone');\nvar utils = require('./utils.cjs');\n\nfunction _interopDefaultLegacy (e) { return e && typeof e === 'object' && 'default' in e ? e : { 'default': e }; }\n\nvar moment__default = /*#__PURE__*/_interopDefaultLegacy(moment);\n\nconst PROPS = ['year', 'month', 'day', 'hour', 'minute', 'second'];\n\nclass CalDate {\n /**\n * constructs a new CalDate instance\n * @param {Object|Date} [opts] - See `set(opts)`\n * @example\n * const CalDate = require('caldate')\n * const caldate = new CalDate('2000-01-01 12:00:00')\n * caldate.year\n * //> 2000\n * caldate.month\n * //> 1\n */\n constructor (opts) {\n this.set(opts);\n }\n\n static toYear (year) {\n return utils.toYear(year)\n }\n\n /**\n * set calendar date\n * @param {Object|Date} [opts] - defaults to `1900-01-01`\n * @param {String} opts.year\n * @param {String} opts.month - January equals to 1, December to 12\n * @param {String} opts.day\n * @param {String} opts.hour\n * @param {String} opts.minute\n * @param {String} opts.second\n * @param {String} opts.duration - defaults to 24 hours\n */\n set (opts) {\n opts = opts || { year: 1900, month: 1, day: 1 };\n if (utils.isDate(opts)) {\n this.year = opts.getFullYear();\n this.month = opts.getMonth() + 1;\n this.day = opts.getDate();\n this.hour = opts.getHours();\n this.minute = opts.getMinutes();\n this.second = opts.getSeconds();\n } else {\n PROPS.forEach((p) => {\n this[p] = utils.toNumber(opts[p]) || 0;\n });\n this.month = this.month || 1;\n this.day = this.day || 1;\n }\n this.duration = opts.duration || 24; // duration is in hours\n return this\n }\n\n /**\n * checks if Date is equal to `calDate`\n * @param {CalDate} calDate\n * @return {Boolean} true if date matches\n */\n isEqualDate (calDate) {\n let res = true;\n this.update()\n ;['year', 'month', 'day'].forEach((p) => {\n res &= (this[p] === calDate[p]);\n });\n return !!res\n }\n\n /**\n * get day of week\n * @return {Number} day of week 0=sunday, 1=monday, ...\n */\n getDay () {\n return this.toDate().getDay()\n }\n\n /**\n * set offset per unit\n * @param {Number} number\n * @param {String} [unit='d'] - Unit in days `d`, hours `h, minutes `m`\n * @return {Object} this\n */\n setOffset (number, unit) {\n if (number) {\n if (typeof number === 'object') {\n unit = number.unit;\n number = number.number;\n }\n unit = unit || 'd';\n number = parseFloat(number, 10);\n if (isNaN(number)) {\n throw new Error('Number required')\n }\n\n const o = { day: 0 };\n if (unit === 'd') {\n o.day = number | 0;\n number -= o.day;\n number *= 24;\n }\n if (unit === 'd' || unit === 'h') {\n o.hour = (number % 24) | 0;\n number -= o.hour;\n number *= 60;\n }\n o.minute = (number % 60) | 0;\n number -= o.minute;\n number *= 60;\n o.second = (number % 60) | 0;\n\n this.day += o.day;\n this.hour += o.hour;\n this.minute += o.minute;\n this.second += o.second;\n }\n this.update();\n return this\n }\n\n /**\n * set time per hour, minute or second while maintaining duration at midnight\n * @param {Number} [hour]\n * @param {Number} [minute]\n * @param {Number} [second]\n * @return {Object} this\n */\n setTime (hour, minute, second) {\n hour = hour || 0;\n minute = minute || 0;\n second = second || 0;\n // the holiday usually ends at midnight - if this is not the case set different duration explicitely\n this.duration = 24 - (hour + minute / 60 + second / 3600);\n this.hour = hour;\n this.minute = minute;\n this.second = second;\n this.update();\n return this\n }\n\n /**\n * set duration in hours\n * @param {Number} duration in hours\n * @return {Object} this\n */\n setDuration (duration) {\n this.duration = duration;\n return this\n }\n\n /**\n * update internal data to real date\n * @return {Object} this\n */\n update () {\n if (this.year) {\n const d = new CalDate(this.toDate());\n PROPS.forEach((p) => {\n this[p] = d[p];\n });\n }\n return this\n }\n\n /**\n * get end date of calendar date\n * @return {CalDate}\n */\n toEndDate () {\n const d = new CalDate(this.toDate());\n d.minute += ((this.duration * 60) | 0);\n d.update();\n return d\n }\n\n /**\n * move internal date to a date in `timezone`\n * @param {String} timezone - e.g. 'America/New_York'\n * @return {Date}\n */\n toTimezone (timezone) {\n if (timezone) {\n return new Date(moment__default[\"default\"].tz(this.toString(), timezone).format())\n } else {\n return this.toDate()\n }\n }\n\n /**\n * set date from a given `timezone`\n * @param {Date} dateUTC - date in UTC\n * @param {String} [timezone] - timezone of dateUTC, e.g. 'America/New_York'\n * @return {CalDate} self\n */\n fromTimezone (dateUTC, timezone) {\n if (timezone) {\n const m = moment__default[\"default\"].tz(dateUTC, timezone);\n this.year = m.year();\n this.month = m.month() + 1;\n this.day = m.date();\n this.hour = m.hours();\n this.minute = m.minutes();\n this.second = m.seconds();\n } else {\n this.set(dateUTC);\n }\n return this\n }\n\n /**\n * convert to Date\n * @return {Date}\n */\n toDate () {\n return new Date(\n this.year, this.month - 1, this.day,\n this.hour, this.minute, this.second, 0\n )\n }\n\n /**\n * get Date in ISO format\n */\n toISOString () {\n return this.toString(true)\n }\n\n /**\n * get Date as String `YYYY-MM-DD HH:MM:SS`\n */\n toString (iso) {\n const d = new CalDate(this.toDate());\n return (\n utils.pad0(d.year, 4) + '-' +\n utils.pad0(d.month) + '-' +\n utils.pad0(d.day) +\n (iso ? 'T' : ' ') +\n utils.pad0(d.hour) + ':' +\n utils.pad0(d.minute) + ':' +\n utils.pad0(d.second) +\n (iso ? 'Z' : '')\n )\n }\n}\n\nexports.CalDate = CalDate;\n", "'use strict';\n\nvar CalDate = require('./CalDate.cjs');\n\n\n\nmodule.exports = CalDate.CalDate;\n", "'use strict';\n\nvar isMergeableObject = function isMergeableObject(value) {\n\treturn isNonNullObject(value)\n\t\t&& !isSpecial(value)\n};\n\nfunction isNonNullObject(value) {\n\treturn !!value && typeof value === 'object'\n}\n\nfunction isSpecial(value) {\n\tvar stringValue = Object.prototype.toString.call(value);\n\n\treturn stringValue === '[object RegExp]'\n\t\t|| stringValue === '[object Date]'\n\t\t|| isReactElement(value)\n}\n\n// see https://github.com/facebook/react/blob/b5ac963fb791d1298e7f396236383bc955f916c1/src/isomorphic/classic/element/ReactElement.js#L21-L25\nvar canUseSymbol = typeof Symbol === 'function' && Symbol.for;\nvar REACT_ELEMENT_TYPE = canUseSymbol ? Symbol.for('react.element') : 0xeac7;\n\nfunction isReactElement(value) {\n\treturn value.$$typeof === REACT_ELEMENT_TYPE\n}\n\nfunction emptyTarget(val) {\n\treturn Array.isArray(val) ? [] : {}\n}\n\nfunction cloneUnlessOtherwiseSpecified(value, options) {\n\treturn (options.clone !== false && options.isMergeableObject(value))\n\t\t? deepmerge(emptyTarget(value), value, options)\n\t\t: value\n}\n\nfunction defaultArrayMerge(target, source, options) {\n\treturn target.concat(source).map(function(element) {\n\t\treturn cloneUnlessOtherwiseSpecified(element, options)\n\t})\n}\n\nfunction getMergeFunction(key, options) {\n\tif (!options.customMerge) {\n\t\treturn deepmerge\n\t}\n\tvar customMerge = options.customMerge(key);\n\treturn typeof customMerge === 'function' ? customMerge : deepmerge\n}\n\nfunction getEnumerableOwnPropertySymbols(target) {\n\treturn Object.getOwnPropertySymbols\n\t\t? Object.getOwnPropertySymbols(target).filter(function(symbol) {\n\t\t\treturn target.propertyIsEnumerable(symbol)\n\t\t})\n\t\t: []\n}\n\nfunction getKeys(target) {\n\treturn Object.keys(target).concat(getEnumerableOwnPropertySymbols(target))\n}\n\nfunction propertyIsOnObject(object, property) {\n\ttry {\n\t\treturn property in object\n\t} catch(_) {\n\t\treturn false\n\t}\n}\n\n// Protects from prototype poisoning and unexpected merging up the prototype chain.\nfunction propertyIsUnsafe(target, key) {\n\treturn propertyIsOnObject(target, key) // Properties are safe to merge if they don't exist in the target yet,\n\t\t&& !(Object.hasOwnProperty.call(target, key) // unsafe if they exist up the prototype chain,\n\t\t\t&& Object.propertyIsEnumerable.call(target, key)) // and also unsafe if they're nonenumerable.\n}\n\nfunction mergeObject(target, source, options) {\n\tvar destination = {};\n\tif (options.isMergeableObject(target)) {\n\t\tgetKeys(target).forEach(function(key) {\n\t\t\tdestination[key] = cloneUnlessOtherwiseSpecified(target[key], options);\n\t\t});\n\t}\n\tgetKeys(source).forEach(function(key) {\n\t\tif (propertyIsUnsafe(target, key)) {\n\t\t\treturn\n\t\t}\n\n\t\tif (propertyIsOnObject(target, key) && options.isMergeableObject(source[key])) {\n\t\t\tdestination[key] = getMergeFunction(key, options)(target[key], source[key], options);\n\t\t} else {\n\t\t\tdestination[key] = cloneUnlessOtherwiseSpecified(source[key], options);\n\t\t}\n\t});\n\treturn destination\n}\n\nfunction deepmerge(target, source, options) {\n\toptions = options || {};\n\toptions.arrayMerge = options.arrayMerge || defaultArrayMerge;\n\toptions.isMergeableObject = options.isMergeableObject || isMergeableObject;\n\t// cloneUnlessOtherwiseSpecified is added to `options` so that custom arrayMerge()\n\t// implementations can use it. The caller may not replace it.\n\toptions.cloneUnlessOtherwiseSpecified = cloneUnlessOtherwiseSpecified;\n\n\tvar sourceIsArray = Array.isArray(source);\n\tvar targetIsArray = Array.isArray(target);\n\tvar sourceAndTargetTypesMatch = sourceIsArray === targetIsArray;\n\n\tif (!sourceAndTargetTypesMatch) {\n\t\treturn cloneUnlessOtherwiseSpecified(source, options)\n\t} else if (sourceIsArray) {\n\t\treturn options.arrayMerge(target, source, options)\n\t} else {\n\t\treturn mergeObject(target, source, options)\n\t}\n}\n\ndeepmerge.all = function deepmergeAll(array, options) {\n\tif (!Array.isArray(array)) {\n\t\tthrow new Error('first argument should be an array')\n\t}\n\n\treturn array.reduce(function(prev, next) {\n\t\treturn deepmerge(prev, next, options)\n\t}, {})\n};\n\nvar deepmerge_1 = deepmerge;\n\nmodule.exports = deepmerge_1;\n", "'use strict';\n\nObject.defineProperty(exports, '__esModule', { value: true });\n\nvar deepmerge = require('deepmerge');\n\nfunction _interopDefaultLegacy (e) { return e && typeof e === 'object' && 'default' in e ? e : { 'default': e }; }\n\nvar deepmerge__default = /*#__PURE__*/_interopDefaultLegacy(deepmerge);\n\n/**\n * lodash compatible methods\n */\n\n/**\n * get value at `keys` from `object`\n * @example\n * get({a: {b: {c: 2}}}, ['a', 'b', 'c']) //> 2\n */\nconst get = (obj, keys = [], def) => {\n let o = obj;\n if (typeof keys === 'string') keys = keys.split('.');\n for (const key of keys) {\n if (o && o[key]) { o = o[key]; } else { return def }\n }\n return o\n};\n\n/**\n * set `value` at `keys` from `object`\n * @example\n * set({a: {b: {c: 2}}}, ['a', 'b', 'c'], 3)\n */\nconst set = (obj, keys = [], value) => {\n let key;\n let ref;\n let o = obj;\n for (key of keys) {\n ref = o;\n if (toString.call(o[key]) !== '[object Object]') o[key] = {};\n o = o[key];\n }\n ref[key] = value;\n return obj\n};\n\n/**\n * omit `object` properties `props`\n */\nconst omit = (object, props = []) => Object.keys(object)\n .filter(p => !~props.indexOf(p))\n .reduce((o, p) => {\n p in object && (o[p] = object[p]);\n return o\n }, {});\n\nconst merge = (...args) => deepmerge__default[\"default\"].all(args);\n\nconst toNumber = (num, def) => {\n const _num = Number(num);\n return isNaN(_num) ? def : _num\n};\n\nvar _ = {\n get,\n set,\n omit,\n merge\n};\n\nexports[\"default\"] = _;\nexports.get = get;\nexports.merge = merge;\nexports.omit = omit;\nexports.set = set;\nexports.toNumber = toNumber;\n", "'use strict';\n\nObject.defineProperty(exports, '__esModule', { value: true });\n\n/**\n * {\n * 0: 'sunday', ...\n * sunday: 0, ...\n * }\n */\nconst DAYS = (function () {\n const o = {};\n 'sunday|monday|tuesday|wednesday|thursday|friday|saturday'\n .split('|')\n .forEach((name, idx) => {\n o[name] = idx;\n o[idx] = name;\n });\n return o\n})();\n\nfunction objectToString (o) {\n return Object.prototype.toString.call(o)\n}\n\nfunction isObject (arg) {\n return typeof arg === 'object' && arg !== null\n}\n\nfunction isDate (d) {\n return isObject(d) && objectToString(d) === '[object Date]'\n}\n\nconst isNil = (v) => v === null || v === undefined;\n\n/**\n * convert string to number\n * @private\n * @param {String} str\n * @return {Number} converted number or undefined\n */\nfunction toNumber (str) {\n const num = parseInt(str, 10);\n if (!isNaN(num)) {\n return num\n }\n}\n\n/**\n * extract or set year\n * @private\n * @param {Number|Date|String} year\n * @return {Number} year\n */\nfunction toYear (year) {\n if (!year) {\n year = new Date().getFullYear();\n } else if (year instanceof Date) {\n year = year.getFullYear();\n } else if (typeof year === 'string') {\n year = toNumber(year);\n }\n return year\n}\n\n/**\n * convert string to Date.\n * 2017 : year = 2017, month = 1, day = 1\n * '2017-07' : year = 2017, month = 7, day = 1\n * '2017-07-03': year = 2017, month = 7, day = 3\n * @param {String} str\n * @param {Boolean} isUTC - return date in UTC\n * @return {Date}\n */\nfunction toDate (str, isUTC) {\n const m = /^(\\d{4})(?:-(\\d{2})(?:-(\\d{2}))?)?.*$/.exec((str || '').toString());\n if (m) {\n m.shift();\n const [year, month, day] = m.map((num) => parseInt(num || 1, 10));\n if (isUTC) {\n return new Date(Date.UTC(year, month - 1, day))\n } else {\n return new Date(year, month - 1, day)\n }\n }\n}\n\nexports.DAYS = DAYS;\nexports.isDate = isDate;\nexports.isNil = isNil;\nexports.isObject = isObject;\nexports.toDate = toDate;\nexports.toNumber = toNumber;\nexports.toYear = toYear;\n", "'use strict';\n\nvar utils = require('./utils.cjs');\n\n/**\n * Handler for holiday data provided in the Json file\n * @class\n * @param {Object} [data]\n * @param {Object|String} [country]\n * @param {String} [state]\n * @param {String} [region]\n */\nclass Data {\n constructor (data, country, state, region) {\n this.opts = Data.splitName(country, state, region) || {};\n this.data = data || {};\n }\n\n /**\n * get all countries from the data\n * @param {String} lang - Iso-639 shortcode\n * @return {Object} shortcode-name value pairs. E.g. `{ AT: '\u00D6sterreich', ... }`\n */\n getCountries (lang) {\n const o = {};\n const countries = utils[\"default\"].get(this.data, 'holidays', {});\n Object.keys(countries).forEach((country) => {\n o[country] = this._name(countries, country, lang, { country });\n });\n return o\n }\n\n /**\n * get all states for a given country from the data\n * @param {String|Object} country\n * @param {String} [lang] - Iso-639 shortcode\n * @return {Object} shortcode-name value pairs. E.g. `{ b: 'Burgenland', ... }`\n */\n getStates (country, lang) {\n const opts = Object.assign({}, Data.splitName(country));\n const states = utils[\"default\"].get(this.data, ['holidays', opts.country, 'states']) ||\n utils[\"default\"].get(this.data, ['holidays', opts.country, 'regions']);\n if (states) {\n const o = {};\n Object.keys(states).forEach((state) => {\n opts.state = state;\n o[state] = this._name(states, state, lang, opts);\n });\n return o\n }\n }\n\n /**\n * get all regions for a given country/ state from the data\n * @param {String} country\n * @param {String} state\n * @param {String} [lang] - Iso-639 shortcode\n * @return {Object} shortcode-name value pairs.\n */\n getRegions (country, state, lang) {\n const opts = Object.assign({}, Data.splitName(country, state));\n const regions = utils[\"default\"].get(this.data, ['holidays', opts.country, 'states', opts.state, 'regions']);\n\n if (regions) {\n const o = {};\n Object.keys(regions).forEach((region) => {\n opts.region = region;\n o[region] = this._name(regions, region, lang, opts);\n });\n return o\n }\n }\n\n /**\n * @private\n */\n _name (obj, key, lang, opts) {\n const names = obj[key].names;\n const _lang = lang || this.getLanguages(opts)[0] || Object.keys(names)[0];\n const mlang = Data.majorLang(_lang);\n const name = obj[key].name || names[_lang] || names[mlang] || names[Object.keys(names)[0]];\n return name\n }\n\n /**\n * get languages for selected country, state, region\n * @return {Array} containing ISO 639-1 language shortcodes\n */\n getLanguages (opts) {\n return this._getValue('langs', opts) || []\n }\n\n /**\n * get default day off as weekday\n * @return {String} weekday of day off\n */\n getDayOff () {\n return this._getValue('dayoff')\n }\n\n /**\n * get timezones for country, state, region\n * @return {Array} of {String}s containing the timezones\n */\n getTimezones () {\n return this._getValue('zones') || []\n }\n\n /**\n * get list of raw holiday rules for country/ state/ region\n * @param {Object|String} [country]\n * @param {String} [state]\n * @param {String} [region]\n * @return {Object} holidayname <-> unparsed rule or date pairs\n */\n getRules (country, state, region) {\n const rules = {};\n const opts = Data.splitName(country, state, region) || this.opts;\n\n if (!(opts && opts.country)) {\n return rules\n }\n\n country = opts.country.toUpperCase();\n state = opts.state;\n region = opts.region;\n let tmp = utils[\"default\"].get(this.data, ['holidays', country]);\n\n if (tmp) {\n this._assign(rules, tmp);\n if ((state && tmp.regions && (tmp = tmp.regions[state])) ||\n (state && tmp.states && (tmp = tmp.states[state]))\n ) {\n this._assign(rules, tmp);\n if (region && tmp.regions && (tmp = tmp.regions[region])) {\n this._assign(rules, tmp);\n }\n }\n Object.keys(rules).forEach((key) => {\n // assign name references with `_name`\n const _name = rules[key]._name;\n if (_name && this.data.names[_name]) {\n delete rules[key]._name;\n rules[key] = utils[\"default\"].merge({}, this.data.names[_name], rules[key]);\n }\n });\n }\n\n return rules\n }\n\n /**\n * get name for substitute name\n * @return {Object} translations of substitute day names\n */\n getSubstitueNames () {\n return utils[\"default\"].get(this.data, ['names', 'substitutes', 'name'])\n }\n\n /**\n * helper to assign objects based on properties\n * @private\n * @param {Object} out - object where obj gets assigned into\n * @param {Object} obj - input obj\n * @return {Object}\n */\n _assign (out, obj) {\n let days = {};\n if (obj._days) { // resolve reference\n const path = ['holidays'].concat(obj._days, 'days');\n const ref = utils[\"default\"].get(this.data, path);\n if (!ref) throw new Error('unknown path for _days: ' + path.join('.'))\n days = Object.assign({}, ref);\n }\n if (days || obj.days) {\n days = Object.assign(days, obj.days);\n Object.keys(days).forEach(function (p) {\n if (days[p] === false) { // remove rules\n if (out[p]) {\n delete out[p];\n }\n return\n }\n out[p] = Object.assign({}, out[p], days[p]);\n if (!days[p].type) {\n out[p].type = 'public';\n }\n });\n }\n return out\n }\n\n /**\n * get a object from the data tree\n * @private\n * @param {String} key - key to look at\n * @return {Object} return object\n */\n _getValue (key, opts = this.opts) {\n return (\n utils[\"default\"].get(this.data, ['holidays', opts.country, 'states', opts.state, 'regions', opts.regions, key]) ||\n utils[\"default\"].get(this.data, ['holidays', opts.country, 'states', opts.state, key]) ||\n utils[\"default\"].get(this.data, ['holidays', opts.country, key])\n )\n }\n}\n\n// static functions\n/**\n * split country state names if they appear in concatenated format e.g. 'at.b'\n * @param {String|Object} country\n * @param {String} [state]\n * @param {String} [region]\n * @return {Object}\n */\nData.splitName = function (country, state, region) {\n if (typeof country === 'object' && country.country) {\n return toUpperCase(country)\n } else if (typeof country === 'string') {\n const a = country.split(/[.-]/);\n const o = {\n country: a.shift(),\n state: a.shift() || state,\n region: a.shift() || region\n };\n return toUpperCase(o)\n }\n};\n\nData.majorLang = function (lang) {\n return (lang || '').split(/-/)[0]\n};\n\n/**\n * @private\n */\nfunction toUpperCase (obj) {\n['country', 'state', 'region'].forEach(key => {\n if (typeof obj[key] === 'string') {\n obj[key] = obj[key].toUpperCase();\n }\n });\n return obj\n}\n\nmodule.exports = Data;\n", "'use strict';\n\nvar utils = require('./internal/utils.cjs');\n\n/* eslint\n no-spaced-func: 0,\n no-unexpected-multiline: 0\n */\n\nconst WEEKDAYS = 'Sunday|Monday|Tuesday|Wednesday|Thursday|Friday|Saturday'.split('|');\n\nconst lowerCaseWeekday = (weekday) => WEEKDAYS.includes(weekday) ? weekday.toLowerCase() : weekday;\n\nconst lowerCaseWeekdayWithoutDay = weekday => (weekday === 'day')\n ? undefined\n : lowerCaseWeekday(weekday);\n\n/**\n * regular expressions to parse holiday statements\n */\nconst grammar = (function () {\n /**\n * combines different regexes\n * @private\n * @return {RegExp} combined regex\n */\n function replace (regex, opt) {\n regex = regex.source;\n opt = opt || '';\n return function self (name, val) {\n if (!name) return new RegExp(regex, opt)\n val = val.source || val;\n val = val.replace(/(^|[^[])\\^/g, '$1');\n regex = regex.replace(name, val);\n return self\n }\n }\n\n // raw rules\n const raw = {\n _weekdays: '[Ss]unday|[Mm]onday|[Tt]uesday|[Ww]ednesday|[Tt]hursday|[Ff]riday|[Ss]aturday|day',\n _months: 'January|February|March|April|May|June|July|August|September|October|November|December',\n _islamicMonths: 'Muharram|Safar|Rabi al-awwal|Rabi al-thani|Jumada al-awwal|Jumada al-thani|Rajab|Shaban|Ramadan|Shawwal|Dhu al-Qidah|Dhu al-Hijjah',\n _hebrewMonths: 'Nisan|Iyyar|Sivan|Tamuz|Av|Elul|Tishrei|Cheshvan|Kislev|Tevet|Shvat|AdarII|Adar',\n _jalaaliMonths: 'Farvardin|Ordibehesht|Khordad|Tir|Mordad|Shahrivar|Mehr|Aban|Azar|Dey|Bahman|Esfand',\n _days: /(_weekdays)s?/,\n _direction: /(before|after|next|previous|in)/,\n _counts: /(\\d+)(?:st|nd|rd|th)?/,\n _count_days: /([-+]?\\d{1,2}) ?(?:days?|d)?/,\n _timezone: / in ([^\\s]*|[+-]\\d{2}:\\d{2})/,\n _type: /(public|bank|school|observance|optional)/,\n\n dateMonth: /^(_months)/,\n date: /^(?:0*(\\d{1,4})-)?0?(\\d{1,2})-0?(\\d{1,2})/,\n time: /^(?:T?0?(\\d{1,2}):0?(\\d{1,2})|T0?(\\d{1,2}))/,\n duration: /^P(?:(\\d+)D)?(?:T(?:(\\d+)H)?(?:(\\d+)M)?)?/, // follows ISO 8601\n\n julian: /^julian date/,\n easter: /^(easter|orthodox)(?: _count_days)?/,\n equinox: /^([Mm]arch|[Jj]une|[Ss]eptember|[Dd]ecember) (?:equinox|solstice)(?:_timezone)?/,\n hebrew: /^0?(\\d{1,2}) (_hebrewMonths)(?: 0*(\\d{1,}))?/,\n islamic: /^0?(\\d{1,2}) (_islamicMonths)(?: 0*(\\d{1,}))?/,\n jalaali: /^0?(\\d{1,2}) (_jalaaliMonths)(?: 0*(\\d{1,}))?/,\n chineseLunar: /^(chinese|korean|vietnamese) (?:(\\d+)-(\\d{1,2})-)?(\\d{1,2})-([01])-(\\d{1,2})/,\n chineseSolar: /^(chinese|korean|vietnamese) (?:(\\d+)-(\\d{1,2})-)?(\\d{1,2})-(\\d{1,2}) solarterm/,\n bengaliRevised: /^(bengali-revised) (?:-?0*(\\d{1,4})-)?0?(\\d{1,2})-0?(\\d{1,2})/,\n\n modifier: /^(substitutes|and|if equal|then|if)\\b/,\n rule_year: /^(?:in (even|odd|leap|non-leap) years|every (\\d+) years? since 0*(\\d{1,4}))/,\n rule_weekday: /(not )?on ((?:(?:_weekdays)(?:,\\s?)?)*)/,\n rule_date_if_then: /^if ((?:(?:_weekdays)(?:,\\s?)?)*) then (?:_direction _days)?/,\n rule_day_dir_date: /^(?:_counts )?_days _direction/,\n rule_bridge: /^is (?:_type )?holiday/,\n rule_if_holiday: /^if is (?:_type )?holiday then (?:_counts )?(?:_direction _days)?(?: omit ((?:(?:_weekdays)(?:,\\s?)?)*))?/,\n rule_same_day: /^#\\d+/,\n rule_active_from: /^since (0*\\d{1,4})(?:-0*(\\d{1,2})(?:-0*(\\d{1,2})|)|)(?: and|)/,\n rule_active_to: /^prior to (0*\\d{1,4})(?:-0*(\\d{1,2})(?:-0*(\\d{1,2})|)|)/,\n\n // rule_type_if_then: /if ((?:(?:_weekdays)(?:,\\s?)?)*) then/,\n // rule_type_dir: /_days _direction$/,\n // rule_type_bridge: / if .* is .* holiday$/,\n\n space: /^\\s+/\n };\n /* eslint-disable func-call-spacing */\n raw._days = replace(raw._days)\n (/_weekdays/, raw._weekdays)\n ();\n raw.julian = replace(raw.julian, '')\n (/date/, raw.date)\n ();\n raw.easter = replace(raw.easter, '')\n (/_count_days/, raw._count_days)\n ();\n raw.equinox = replace(raw.equinox, '')\n (/_count_days/g, raw._count_days)\n (/_direction/g, raw._direction)\n (/_timezone/g, raw._timezone)\n ();\n raw.hebrew = replace(raw.hebrew, '')\n (/_hebrewMonths/, raw._hebrewMonths)\n ();\n raw.islamic = replace(raw.islamic, '')\n (/_islamicMonths/, raw._islamicMonths)\n ();\n raw.jalaali = replace(raw.jalaali, '')\n (/_jalaaliMonths/, raw._jalaaliMonths)\n ();\n raw.dateMonth = replace(raw.dateMonth)\n (/_months/, raw._months)\n ();\n\n raw.rule_weekday = replace(raw.rule_weekday, '')\n (/_weekdays/g, raw._weekdays)\n ();\n raw.rule_date_if_then = replace(raw.rule_date_if_then, '')\n (/_direction/g, raw._direction)\n (/_weekdays/g, raw._weekdays)\n (/_days/g, raw._days)\n ();\n raw.rule_bridge = replace(raw.rule_bridge, '')\n (/_type/g, raw._type)\n ();\n raw.rule_if_holiday = replace(raw.rule_if_holiday, '')\n (/_type/g, raw._type)\n (/_counts/g, raw._counts)\n (/_direction/g, raw._direction)\n (/_days/g, raw._days)\n (/_weekdays/g, raw._weekdays)\n ();\n raw.rule_day_dir_date = replace(raw.rule_day_dir_date, '')\n (/_counts/, raw._counts)\n (/_days/g, raw._days)\n (/_direction/g, raw._direction)\n ();\n // raw.rule_type_if_then = replace(raw.rule_type_if_then, '')\n // (/_direction/g, raw._direction)\n // (/_days/g, raw._days)\n // ()\n\n let i = 1;\n raw.months = {};\n raw._months.split('|').forEach(function (m) {\n raw.months[m] = i++;\n });\n\n i = 1;\n raw.islamicMonths = {};\n raw._islamicMonths.split('|').forEach(function (m) {\n raw.islamicMonths[m] = i++;\n });\n\n i = 1;\n raw.hebrewMonths = {};\n raw._hebrewMonths.split('|').forEach(function (m) {\n raw.hebrewMonths[m] = i++;\n });\n // parser regex needs larger string before shorter AdarII and Adar pos needs correction\n raw.hebrewMonths.Adar = 12;\n raw.hebrewMonths.AdarII = 13;\n\n i = 1;\n raw.jalaaliMonths = {};\n raw._jalaaliMonths.split('|').forEach(function (m) {\n raw.jalaaliMonths[m] = i++;\n });\n\n return raw\n /* eslint-enable */\n})();\n\n// console.log(grammar)\n\nclass Parser {\n constructor (fns) {\n this.fns = fns || [\n '_julian',\n '_date',\n '_easter',\n '_islamic',\n '_hebrew',\n '_jalaali',\n '_equinox',\n '_chineseSolar',\n '_chineseLunar',\n '_bengaliRevised',\n '_dateMonth',\n '_ruleDateIfThen',\n '_ruleWeekday',\n '_ruleYear',\n '_ruleDateDir',\n '_ruleIfHoliday',\n '_ruleBridge',\n '_ruleTime',\n '_ruleDuration',\n '_ruleModifier',\n '_ruleSameDay',\n '_ruleActiveFrom',\n '_ruleActiveTo'\n ];\n this.tokens = [];\n }\n\n parse (rule) {\n this.setup = { str: rule, rule };\n this.error = 0;\n this.tokens = [];\n this._tokenize(this.setup);\n this._reorder();\n return this.tokens\n }\n\n /**\n * reorder set of tokens for rule dateDir\n * dateDir: [dateDir2, dateDir1, fn] --> [fn, dateDir1, dateDir2]\n * dateIfThen: [fn, dateIfThen1, dateIfThen2] --> [fn, dateIfThen1, dateIfThen2]\n */\n _reorder () {\n const tmp = [];\n const res = [];\n\n this.tokens.forEach((token) => {\n if (token.rule === 'dateDir') {\n tmp.push(token);\n } else {\n res.push(token);\n if (tmp.length) {\n while (tmp.length) {\n res.push(tmp.pop());\n }\n }\n }\n\n // no modifiers before a date\n if (token.fn && res[0].modifier) {\n while (res[0].modifier) {\n res.push(res.shift());\n }\n }\n });\n this.tokens = res;\n }\n\n _tokenize (o) {\n let last;\n while (o.str) {\n for (let i = 0; i < this.fns.length; i++) {\n if (this[this.fns[i]](o)) break\n }\n this._space(o);\n if (last === o.str) {\n this.error++;\n break\n }\n last = o.str;\n }\n }\n\n _shorten (o, cap0) {\n o.str = o.str.substr(cap0.length, o.str.length);\n }\n\n _date (o) {\n let cap;\n if ((cap = grammar.date.exec(o.str))) {\n this._shorten(o, cap[0]);\n cap.shift();\n const res = {\n fn: 'gregorian',\n year: utils.toNumber(cap.shift()),\n month: utils.toNumber(cap.shift()),\n day: utils.toNumber(cap.shift())\n };\n this.tokens.push(res);\n return true\n }\n }\n\n _julian (o) {\n let cap;\n if ((cap = grammar.julian.exec(o.str))) {\n this._shorten(o, cap[0]);\n cap.shift();\n const res = {\n fn: 'julian',\n year: utils.toNumber(cap.shift()),\n month: utils.toNumber(cap.shift()),\n day: utils.toNumber(cap.shift())\n };\n this.tokens.push(res);\n return true\n }\n }\n\n _easter (o) {\n let cap;\n if ((cap = grammar.easter.exec(o.str))) {\n this._shorten(o, cap[0]);\n cap.shift();\n const res = {\n fn: 'easter',\n type: cap.shift(),\n offset: utils.toNumber(cap.shift()) || 0\n };\n this.tokens.push(res);\n return true\n }\n }\n\n _equinox (o) {\n let cap;\n if ((cap = grammar.equinox.exec(o.str))) {\n this._shorten(o, cap[0]);\n cap.shift();\n const res = {\n fn: 'equinox',\n season: cap.shift().toLowerCase(),\n timezone: cap.shift() || 'GMT'\n };\n this.tokens.push(res);\n return true\n }\n }\n\n _hebrew (o) {\n let cap;\n\n if ((cap = grammar.hebrew.exec(o.str))) {\n this._shorten(o, cap[0]);\n cap.shift();\n const res = {\n fn: 'hebrew',\n day: utils.toNumber(cap.shift()),\n month: grammar.hebrewMonths[cap.shift()],\n year: utils.toNumber(cap.shift())\n };\n this.tokens.push(res);\n return true\n }\n }\n\n _islamic (o) {\n let cap;\n if ((cap = grammar.islamic.exec(o.str))) {\n this._shorten(o, cap[0]);\n cap.shift();\n const res = {\n fn: 'islamic',\n day: utils.toNumber(cap.shift()),\n month: grammar.islamicMonths[cap.shift()],\n year: utils.toNumber(cap.shift())\n };\n this.tokens.push(res);\n return true\n }\n }\n\n _jalaali (o) {\n let cap;\n if ((cap = grammar.jalaali.exec(o.str))) {\n this._shorten(o, cap[0]);\n cap.shift();\n const res = {\n fn: 'jalaali',\n day: utils.toNumber(cap.shift()),\n month: grammar.jalaaliMonths[cap.shift()],\n year: utils.toNumber(cap.shift())\n };\n this.tokens.push(res);\n return true\n }\n }\n\n _chineseSolar (o) {\n let cap;\n if ((cap = grammar.chineseSolar.exec(o.str))) {\n this._shorten(o, cap[0]);\n cap.shift();\n const res = {\n fn: cap.shift(),\n cycle: utils.toNumber(cap.shift()),\n year: utils.toNumber(cap.shift()),\n solarterm: utils.toNumber(cap.shift()),\n day: utils.toNumber(cap.shift()),\n timezone: cap.shift()\n };\n this.tokens.push(res);\n return true\n }\n }\n\n _chineseLunar (o) {\n let cap;\n if ((cap = grammar.chineseLunar.exec(o.str))) {\n this._shorten(o, cap[0]);\n cap.shift();\n const res = {\n fn: cap.shift(),\n cycle: utils.toNumber(cap.shift()),\n year: utils.toNumber(cap.shift()),\n month: utils.toNumber(cap.shift()),\n leapMonth: !!utils.toNumber(cap.shift()),\n day: utils.toNumber(cap.shift()),\n timezone: cap.shift()\n };\n this.tokens.push(res);\n return true\n }\n }\n\n _bengaliRevised (o) {\n let cap;\n if ((cap = grammar.bengaliRevised.exec(o.str))) {\n this._shorten(o, cap[0]);\n cap.shift();\n const res = {\n fn: cap.shift(),\n year: utils.toNumber(cap.shift()),\n month: utils.toNumber(cap.shift()),\n day: utils.toNumber(cap.shift())\n };\n this.tokens.push(res);\n return true\n }\n }\n\n _dateMonth (o) {\n let cap;\n if ((cap = grammar.dateMonth.exec(o.str))) {\n this._shorten(o, cap[0]);\n cap.shift();\n const res = {\n fn: 'gregorian',\n day: 1,\n month: grammar.months[cap.shift()],\n year: undefined\n };\n this.tokens.push(res);\n return true\n }\n }\n\n _space (o) {\n let cap;\n if ((cap = grammar.space.exec(o.str))) {\n this._shorten(o, cap[0]);\n return true\n }\n }\n\n _ruleSameDay (o) {\n let cap;\n if ((cap = grammar.rule_same_day.exec(o.str))) {\n this._shorten(o, cap[0]);\n return true\n }\n }\n\n _ruleModifier (o) {\n let cap;\n if ((cap = grammar.modifier.exec(o.str))) {\n this._shorten(o, cap[0]);\n cap.shift();\n const res = {\n modifier: cap.shift()\n };\n this.tokens.push(res);\n return true\n }\n }\n\n _ruleTime (o) {\n let cap;\n if ((cap = grammar.time.exec(o.str))) {\n this._shorten(o, cap[0]);\n cap.shift();\n const res = {\n rule: 'time',\n hour: utils.toNumber(cap.shift()) || 0,\n minute: utils.toNumber(cap.shift()) || 0\n };\n res.hour = res.hour || utils.toNumber(cap.shift()) || 0;\n this.tokens.push(res);\n return true\n }\n }\n\n _ruleDuration (o) {\n let cap;\n if ((cap = grammar.duration.exec(o.str))) {\n this._shorten(o, cap[0]);\n cap.shift();\n const tmp = {\n days: utils.toNumber(cap.shift()) || 0,\n hours: utils.toNumber(cap.shift()) || 0,\n minutes: utils.toNumber(cap.shift()) || 0\n };\n const res = {\n rule: 'duration',\n // duration is calculated in hours\n duration: (tmp.days * 24) + tmp.hours + (tmp.minutes / 60)\n };\n this.tokens.push(res);\n return true\n }\n }\n\n _ruleDateIfThen (o) {\n let cap;\n if ((cap = grammar.rule_date_if_then.exec(o.str))) {\n this._shorten(o, cap[0]);\n cap.shift();\n const res = {\n rule: 'dateIfThen',\n if: (cap.shift()).split(/(?:,\\s?)/).map(lowerCaseWeekday),\n direction: cap.shift(),\n then: lowerCaseWeekday(cap.shift())\n };\n // create a sub-parser to only check for time, duration\n const p = new Parser(['_ruleTime', '_ruleDuration']);\n p.parse(o.str);\n if (p.tokens.length) {\n res.rules = p.tokens;\n }\n o.str = ' ' + p.setup.str; // ' ' required such that the _tokenize function finalizes the loop\n this.tokens.push(res);\n return true\n }\n }\n\n _ruleWeekday (o) {\n let cap;\n if ((cap = grammar.rule_weekday.exec(o.str))) {\n this._shorten(o, cap[0]);\n cap.shift();\n const res = {\n rule: 'weekday',\n not: !!cap.shift(),\n if: (cap.shift()).split(/(?:,\\s?)/).map(lowerCaseWeekday)\n };\n this.tokens.push(res);\n return true\n }\n }\n\n _ruleDateDir (o) {\n let cap;\n if ((cap = grammar.rule_day_dir_date.exec(o.str))) {\n this._shorten(o, cap[0]);\n cap.shift();\n const res = {\n rule: 'dateDir',\n count: utils.toNumber(cap.shift()) || 1,\n weekday: lowerCaseWeekday(cap.shift()),\n direction: cap.shift()\n };\n if (res.direction === 'in') {\n res.direction = 'after';\n }\n this.tokens.push(res);\n return true\n }\n }\n\n _ruleYear (o) {\n let cap;\n if ((cap = grammar.rule_year.exec(o.str))) {\n this._shorten(o, cap[0]);\n cap.shift();\n const res = {\n rule: 'year',\n cardinality: cap.shift(),\n every: utils.toNumber(cap.shift()),\n since: utils.toNumber(cap.shift())\n };\n this.tokens.push(res);\n return true\n }\n }\n\n _ruleIfHoliday (o) {\n let cap;\n if ((cap = grammar.rule_if_holiday.exec(o.str))) {\n this._shorten(o, cap[0]);\n cap.shift();\n const res = {\n rule: 'ruleIfHoliday',\n type: cap.shift(),\n count: utils.toNumber(cap.shift()) || 1,\n direction: cap.shift(),\n weekday: lowerCaseWeekday(cap.shift()),\n omit: (cap.shift() || '').split(/(?:,\\s?)/).map(lowerCaseWeekdayWithoutDay).filter(Boolean)\n };\n this.tokens.push(res);\n return true\n }\n }\n\n _ruleBridge (o) {\n let cap;\n if ((cap = grammar.rule_bridge.exec(o.str))) {\n this._shorten(o, cap[0]);\n cap.shift();\n const res = {\n rule: 'bridge',\n type: cap.shift()\n };\n this.tokens.push(res);\n return true\n }\n }\n\n _ruleActiveFrom (o) {\n let cap;\n if ((cap = grammar.rule_active_from.exec(o.str))) {\n this._shorten(o, cap[0]);\n cap.shift();\n const res = {\n rule: 'activeFrom',\n year: utils.toNumber(cap.shift()),\n month: utils.toNumber(cap.shift()) || 1,\n day: utils.toNumber(cap.shift()) || 1\n };\n this.tokens.push(res);\n return true\n }\n }\n\n _ruleActiveTo (o) {\n let cap;\n if ((cap = grammar.rule_active_to.exec(o.str))) {\n this._shorten(o, cap[0]);\n cap.shift();\n const res = {\n rule: 'activeTo',\n year: utils.toNumber(cap.shift()),\n month: utils.toNumber(cap.shift()) || 1,\n day: utils.toNumber(cap.shift()) || 1\n };\n this.tokens.push(res);\n return true\n }\n }\n}\n\nmodule.exports = Parser;\n", "'use strict';\n\nvar CalDate = require('caldate');\nvar utils = require('./internal/utils.cjs');\n\nfunction _interopDefaultLegacy (e) { return e && typeof e === 'object' && 'default' in e ? e : { 'default': e }; }\n\nvar CalDate__default = /*#__PURE__*/_interopDefaultLegacy(CalDate);\n\n/**\n * handle rule per event\n */\n\nclass Rule {\n /**\n * @param {CalEvent} [calEvent]\n * @param {array} [holidays]\n */\n constructor (calEvent) {\n this.calEvent = calEvent;\n }\n\n /**\n * @param {CalEvent} calEvent\n */\n setEvent (calEvent) {\n this.calEvent = calEvent;\n return this\n }\n\n /**\n * @return {CalEvent}\n */\n getEvent () {\n return this.calEvent\n }\n\n /**\n * @param {string} modifier\n */\n setModifier (modifier) {\n this.modifier = modifier;\n }\n\n /**\n * resolves rule to function\n * @param {object} rule\n */\n resolve (rule) {\n if (rule.rule &&\n typeof this[rule.rule] === 'function'\n ) {\n this[rule.rule](rule);\n } else if (rule.modifier) {\n this.modifier = rule.modifier;\n }\n return this\n }\n\n /**\n * @param {CalEvent} [calEvent]\n * @param {object} rule\n * {\n * rule: \"dateDir\",\n * count: 1,\n * weekday: \"tuesday\",\n * direction: \"after\",\n * omit: ['sunday']\n * }\n */\n dateDir (rule) {\n const omitWeekdays = ([].concat(rule.omit)).map(weekday => utils.DAYS[weekday]).filter(v => !utils.isNil(v));\n\n const isOmitDay = (offset, weekday) => {\n let wd = offset + weekday;\n while (wd < 0) { wd += 70; }\n return omitWeekdays.includes(wd % 7)\n };\n\n this.calEvent.dates.forEach((date) => {\n let offset;\n let count = rule.count - 1;\n const weekday = date.getDay();\n const ruleWeekday = utils.DAYS[rule.weekday];\n\n const isDirBefore = ['before', 'previous'].includes(rule.direction);\n // correct count if weekday is same for next direction\n if (rule.direction === 'next' && weekday === ruleWeekday) {\n count += 1;\n }\n\n if (rule.weekday === 'day') {\n let i = 0;\n if (isDirBefore) {\n offset = (count + 1) * -1;\n while (i++ < 7 && isOmitDay(offset, weekday)) {\n offset -= 1;\n }\n } else {\n offset = count + 1;\n while (i++ < 7 && isOmitDay(offset, weekday)) {\n offset += 1;\n }\n }\n } else {\n if (isDirBefore) {\n if (weekday === ruleWeekday) {\n count++;\n }\n offset = ((7 + weekday - ruleWeekday) % 7 + count * 7) * -1;\n } else {\n offset = ((7 - weekday + ruleWeekday) % 7 + count * 7);\n }\n }\n if (offset) {\n date.setOffset(offset);\n }\n });\n }\n\n /**\n * @param {object} rule\n * {\n * rule: \"dateIfThen\",\n * if: [\"sunday\"],\n * direction: \"next\",\n * then: \"sunday\"\n * }\n */\n dateIfThen (rule) {\n const dates = [];\n\n this.calEvent.dates = this.calEvent.dates.map((date) => {\n if (date._lock) {\n return date\n }\n const weekday = date.getDay();\n if (~(rule.if).indexOf(utils.DAYS[weekday])) {\n if (this.modifier === 'and') {\n dates.push(new CalDate__default[\"default\"](date));\n date.substitute = true;\n }\n date._filter = false;\n let offset = 0;\n const then = utils.DAYS[rule.then];\n if (rule.then && then !== 'undefined') {\n if (rule.direction === 'previous') {\n offset = -1 * ((7 + weekday - then) % 7);\n if (!offset) {\n offset = -7;\n }\n } else {\n offset = ((7 - weekday + then) % 7);\n if (!offset) {\n offset = 7;\n }\n }\n date.setOffset(offset);\n date._lock = true;\n if (this.modifier === 'substitutes') date.substitute = true;\n }\n (rule.rules || []).forEach((rule) => {\n switch (rule.rule) {\n case 'time':\n date.setTime(rule.hour, rule.minute);\n break\n case 'duration':\n date.duration = rule.duration;\n break\n }\n });\n } else if (this.modifier === 'substitutes') {\n date._filter = true;\n }\n return date\n });\n this.calEvent.dates = dates.concat(this.calEvent.dates);\n }\n\n /**\n * @param {object} rule\n * {\n * rule: \"weekday\",\n * if: [\"sunday\", \"saturday\"],\n * not: false,\n * }\n */\n weekday (rule) {\n this.calEvent.dates = this.calEvent.dates.map((date) => {\n const weekday = date.getDay();\n let match = (rule.if).indexOf(utils.DAYS[weekday]) !== -1;\n if (rule.not) match = !match;\n if (match) return date\n }).filter(date => date);\n }\n\n time (rule) {\n this.calEvent.dates.forEach((date) => {\n date.setTime(rule.hour, rule.minute);\n });\n }\n\n duration (rule) {\n this.calEvent.dates.forEach((date) => {\n date.duration = rule.duration;\n });\n }\n\n bridge () {\n return true // needs postprocessing\n }\n\n ruleIfHoliday () {\n return true // needs postprocessing\n }\n\n activeFrom (rule) {\n this.calEvent.setActive({ from: new CalDate__default[\"default\"](rule).toDate() });\n }\n\n activeTo (rule) {\n this.calEvent.setActive({ to: new CalDate__default[\"default\"](rule).toDate() });\n }\n\n /**\n * @param {object} rule\n * {\n * rule: \"year\",\n * cardinality: \"leap\",\n * every: undefined,\n * since: undefined\n * }\n */\n year (rule) {\n this.calEvent.dates = this.calEvent.dates.map((date) => {\n if (rule.cardinality) {\n if (rule.cardinality === 'leap' && this._isLeapYear(date.year)) {\n return date\n } else if (rule.cardinality === 'non-leap' && !this._isLeapYear(date.year)) {\n return date\n } else if (rule.cardinality === 'even' && (date.year + 1) % 2) {\n return date\n } else if (rule.cardinality === 'odd' && date.year % 2) {\n return date\n }\n } else if (rule.every !== undefined && rule.since !== undefined) {\n const tmp = (date.year - rule.since) % rule.every;\n if (tmp === 0) {\n return date\n }\n }\n }).filter(date => date);\n }\n\n /**\n * @private\n * @return {Boolean} if true year is a leap year\n */\n _isLeapYear (year) {\n if ((year % 400 === 0) || (year % 4 === 0 && year % 100 !== 0)) {\n return true\n }\n return false\n }\n}\n\nmodule.exports = Rule;\n", "'use strict';\n\nvar utils = require('./internal/utils.cjs');\nvar CalDate = require('caldate');\n\nfunction _interopDefaultLegacy (e) { return e && typeof e === 'object' && 'default' in e ? e : { 'default': e }; }\n\nvar CalDate__default = /*#__PURE__*/_interopDefaultLegacy(CalDate);\n\nclass CalEvent {\n /**\n * @param {object|Date} opts\n * @param {string} opts.fn function type\n * @param {number} [opts.day]\n * @param {number} [opts.month]\n * @param {number} [opts.year]\n * @param {number} [opts.offset]\n * @param {boolean} [opts.substitute]\n */\n constructor (opts) {\n opts = opts || {};\n this.substitute = opts.substitute;\n this.opts = opts;\n this.offset = opts.offset;\n this.dates = [];\n this.active = undefined; // active props from prior to rule\n if (utils.isDate(opts)) {\n this.opts = new CalDate__default[\"default\"](opts);\n }\n }\n\n /**\n * @param {number} year\n * @returns {this}\n */\n inYear (year) {\n const d = (new CalDate__default[\"default\"](this.opts)).setOffset(this.offset);\n if (!(d.year && d.year !== year)) {\n d.year = year;\n this.dates.push(d);\n }\n return this\n }\n\n reset () {\n this.dates = [];\n }\n\n /**\n * @param {CalEvent} calEvent\n * @returns {boolean}\n */\n isEqualDate (calEvent) {\n let res = false;\n for (const thisDate of this.dates) {\n for (const date of calEvent.dates) {\n res |= thisDate.isEqualDate(date);\n }\n }\n return !!res\n }\n\n /**\n * Filter out disabled dates\n * @param {number} year\n * @param {number} month\n * @returns {this}\n */\n filterDisabled (year, month) {\n if (!year) {\n return this\n }\n\n this.dates = this.dates.filter((date) => {\n const disable = month\n ? date.year === year && date.month === month\n : date.year === year;\n return !disable\n });\n\n return this\n }\n\n /**\n * @param {number} year - year to filter\n * @param {object[]} active - definition of active ranges `{from: {Date}, [to]: {Date}}`\n * @return {this} for chaining\n */\n filterActive (year, active = this.active) {\n this.dates = this.dates.filter((date) => {\n if (!date._filter && isActive(date, year, active)) {\n return date\n }\n });\n\n return this\n }\n\n /**\n * @param {object} active\n * @param {Date} [active.from ]\n * @param {Date} [active.to]\n * @returns\n */\n setActive (active) {\n const { from, to } = active;\n let pushIt = true;\n this.active = this.active || [];\n if (to && !from) {\n const last = this.active[this.active.length - 1];\n if (last && last.from && !last.to) {\n last.to = to;\n pushIt = false;\n }\n }\n if (pushIt) {\n this.active.push(active);\n }\n\n return this\n }\n\n /**\n * @param {CalEvent} calEvent\n */\n push (calEvent) {\n if (calEvent && Array.isArray(calEvent.dates)) {\n this.dates = this.dates.concat(calEvent.dates);\n }\n }\n\n /**\n * @param {string} timezone\n * @returns\n */\n get (timezone) {\n const arr = this.dates.map((date) => {\n const cdate = new CalDate__default[\"default\"](date);\n const o = {\n date: cdate.toString(),\n start: cdate.toTimezone(timezone),\n end: cdate.toEndDate().toTimezone(timezone)\n };\n this._addSubstitute(date, o);\n return o\n });\n return arr\n }\n\n _addSubstitute (date, obj) {\n if (this.substitute || date.substitute) obj.substitute = true;\n }\n}\n\nfunction isActive (date, year, active) {\n if (!active) {\n return date.year === year\n }\n const _date = date.toDate();\n for (const a of active) {\n const { from, to } = a;\n if (\n date.year === year &&\n ((from && to && from <= _date && to > _date) ||\n (from && !to && from <= _date) ||\n (!from && to && to > _date))\n ) {\n return true\n }\n }\n}\n\nmodule.exports = CalEvent;\n", "'use strict';\n\nvar utils = require('./utils.cjs');\nvar Rule = require('./Rule.cjs');\nvar CalEvent = require('./CalEvent.cjs');\n\nclass PostRule {\n /**\n * @param {String} ruleStr\n * @param {Object} opts\n * @param {Array} [holidays]\n */\n constructor (ruleStr, opts, holidays) {\n this.opts = opts;\n this.ruleStr = ruleStr;\n this.ruleSet = holidays && holidays[ruleStr];\n this.holidays = holidays;\n this.events = [];\n }\n\n push (calEvent) {\n this.events.push(calEvent);\n }\n\n /**\n * @param {number} year\n * @returns {CalEvent}\n */\n getEvent (year) {\n const active = this.ruleSet && this.ruleSet.active;\n this.disable(year);\n const ev = this.events[0];\n ev.filterActive(year, active);\n return ev\n }\n\n /**\n * @param {Array} rule\n * @param {number} year\n */\n resolve (rule, year) {\n if (rule.rule && typeof this[rule.rule] === 'function') {\n this[rule.rule](rule, year);\n }\n }\n\n /**\n * @param {Array} rule\n * @param {number} year\n */\n bridge (rule, year) {\n const found = new Array(this.events.length).fill(false);\n found[0] = true;\n const type = rule.type || 'public';\n\n // get all holidays of the given year\n for (const ruleStr in this.holidays) {\n const dateFn = this.holidays[ruleStr].fn;\n if (dateFn && dateFn.ruleStr !== this.ruleStr) {\n const tmpEv = dateFn.inYear(year);\n const tmpEvType = utils.get(tmpEv, 'opts.type') || 'public';\n for (let i = 1; i < this.events.length; i++) {\n if (found[i]) continue\n const isEqualDate = tmpEv.event.isEqualDate(this.events[i]);\n if (isEqualDate && tmpEvType === type) {\n found[i] = true;\n }\n }\n }\n if (!~found.indexOf(false)) { // pre-exit if all found\n break\n }\n }\n\n if (~found.indexOf(false)) {\n this.events[0].reset();\n }\n }\n\n ruleIfHoliday (rule, year) {\n const type = rule.type || 'public';\n\n // get all holidays of the given year\n for (const ruleStr in this.holidays) {\n const dateFn = this.holidays[ruleStr].fn;\n if (dateFn && dateFn.ruleStr !== this.ruleStr) {\n const tmpEv = dateFn.inYear(year);\n const tmpEvType = utils.get(tmpEv, 'opts.type') || 'public';\n for (let i = 0; i < this.events.length; i++) {\n const isEqualDate = tmpEv.event.isEqualDate(this.events[i]);\n if (isEqualDate && tmpEvType === type) {\n new Rule(this.events[i]).resolve({ ...rule, rule: 'dateDir' });\n return\n }\n }\n }\n }\n }\n\n /**\n * @param {number} year\n */\n disable (year) {\n const { disable, enable } = this.opts || {};\n if (!disable || !disable.length) return\n\n const ev = this.events[0];\n\n // check if exact event was disabled or moved\n let tmpEv = _findEventInYear(year, disable);\n if (tmpEv) {\n if (tmpEv.isEqualDate(ev)) {\n ev.reset();\n tmpEv = _findEventInYear(year, enable);\n if (tmpEv) this.events[0] = tmpEv;\n }\n return\n }\n\n // simply check if the event can be disabled for year-(month)\n const [_year, _month] = _findDisabled(year, disable);\n ev.filterDisabled(_year, _month);\n }\n}\n\nconst isoDate = (isoDateStr) => String(isoDateStr).split('-').map(v => utils.toNumber(v));\n\nfunction _findEventInYear (_year, arr = []) {\n for (const item of arr) {\n const [year, month, day] = isoDate(item);\n if (year === _year && month && day) {\n return new CalEvent({ year, month, day }).inYear(year)\n }\n }\n}\n\nfunction _findDisabled (_year, arr = []) {\n for (const isoDateStr of arr) {\n const [year, month] = isoDate(isoDateStr);\n if (_year === year) {\n return [year, month]\n }\n }\n return []\n}\n\nmodule.exports = PostRule;\n", "'use strict';\n\nObject.defineProperty(exports, '__esModule', { value: true });\n\n/**\n * @private\n */\nfunction _toYear (year) {\n if (!year) {\n year = new Date().getFullYear();\n } else if (year instanceof Date) {\n year = year.getFullYear();\n } else if (typeof year === 'string') {\n year = parseInt(year, 10);\n }\n return year\n}\n\nfunction pre (num, l) {\n l = l || 2;\n const s = '0000' + num;\n return s.substr(s.length - l, l)\n}\n\nclass EasterDate {\n constructor (year, month, day) {\n this.year = year;\n this.month = month;\n this.day = day;\n }\n\n toString () {\n return [pre(this.year, 4), pre(this.month), pre(this.day)].join('-')\n }\n}\n\n/**\n * from https://de.wikipedia.org/wiki/Gau%C3%9Fsche_Osterformel\n * erg\u00E4nzte Formel\n */\nfunction _easter (year, julian, gregorian) {\n year = _toYear(year);\n\n const k = Math.floor(year / 100);\n let m = 15 + Math.floor((3 * k + 3) / 4) - Math.floor((8 * k + 13) / 25);\n let s = 2 - Math.floor((3 * k + 3) / 4);\n if (julian) {\n m = 15;\n s = 0;\n }\n const a = year % 19;\n const d = (19 * a + m) % 30;\n const r = Math.floor((d + a / 11) / 29);\n const og = 21 + d - r;\n const sz = 7 - Math.floor(year + year / 4 + s) % 7;\n const oe = 7 - (og - sz) % 7;\n let os = og + oe;\n if (gregorian) {\n os = os + Math.floor(year / 100) - Math.floor(year / 400) - 2;\n }\n // 1 2 3 4 5 6 7 8\n const daysPerMonth = [0, 31, 28, 31, 30, 31, 30, 31, 31];\n let day = os;\n let month;\n for (month = 3; month < 8; month++) {\n if (day <= daysPerMonth[month]) {\n break\n }\n day -= daysPerMonth[month];\n }\n\n return new EasterDate(year, month, day)\n}\n\n/**\n * Calculate easter sunday in the gregorian calendar\n * @param {Date|Number} year\n * @return {EasterDate}\n */\nfunction gregorianEaster (year) {\n return _easter(year)\n}\n\n/**\n * Calculate easter sunday in the gregorian calendar (Shortcut for\n * `gregorianEaster`)\n * @param {Date|Number} year\n * @return {EasterDate}\n */\nconst easter = gregorianEaster;\n\n/**\n * Calculate easter sunday in the julian calendar\n * @param {Date|Number} year\n * @return {EasterDate}\n */\nfunction julianEaster (year) {\n return _easter(year, true)\n}\n\n/**\n * Orthodox Easter in gregorian calender\n * @param {Date|Number} year\n * @return {EasterDate}\n */\nfunction orthodoxEaster (year) {\n return _easter(year, true, true)\n}\n\nvar index = {\n easter,\n gregorianEaster,\n julianEaster,\n orthodoxEaster\n};\n\nexports.EasterDate = EasterDate;\nexports[\"default\"] = index;\nexports.easter = easter;\nexports.gregorianEaster = gregorianEaster;\nexports.julianEaster = julianEaster;\nexports.orthodoxEaster = orthodoxEaster;\n", "'use strict';\n\nvar easter = require('date-easter');\nvar CalDate = require('caldate');\nvar CalEvent = require('./CalEvent.cjs');\n\nfunction _interopDefaultLegacy (e) { return e && typeof e === 'object' && 'default' in e ? e : { 'default': e }; }\n\nvar easter__default = /*#__PURE__*/_interopDefaultLegacy(easter);\nvar CalDate__default = /*#__PURE__*/_interopDefaultLegacy(CalDate);\n\nclass Easter extends CalEvent {\n /**\n * @param {object} [opts]\n * @param {string} opts.type - type of eastern (easter|orthodox)\n * @param {number|string} opts.offset - offset in days\n */\n constructor (opts) {\n opts = opts || {};\n super(opts);\n\n this._fn = easter__default[\"default\"].easter;\n if (opts.type === 'orthodox') {\n this._fn = easter__default[\"default\"].orthodoxEaster;\n }\n }\n\n inYear (year) {\n const d = (new CalDate__default[\"default\"](this._fn(year))).setOffset(this.offset);\n this.dates.push(d);\n return this\n }\n}\n\nmodule.exports = Easter;\n", "'use strict';\n\nObject.defineProperty(exports, '__esModule', { value: true });\n\n/**\n * @copyright 2013 Sonia Keys\n * @copyright 2016 commenthol\n * @license MIT\n * @module base\n */\n/**\n * Base: Functions and other definitions useful with multiple packages.\n *\n * Base contains various definitions and support functions useful in multiple\n * chapters.\n *\n * Bessellian and Julian Year\n *\n * Chapter 21, Precession actually contains these definitions. They are moved\n * here because of their general utility.\n *\n * Chapter 22, Nutation contains the function for Julian centuries since J2000.\n *\n * Phase angle functions\n *\n * Two functions, Illuminated and Limb, concern the illumnated phase of a body\n * and are given in two chapters, 41 an 48. They are collected here because\n * the identical functions apply in both chapters.\n *\n * General purpose math functions\n *\n * SmallAngle is recommended in chapter 17, p. 109.\n *\n * PMod addresses the issue on p. 7, chapter 1, in the section \"Trigonometric\n * functions of large angles\", but the function is not written to be specific\n * to angles and so has more general utility.\n *\n * Horner is described on p. 10, chapter 1.\n *\n * FloorDiv and FloorDiv64 are optimizations for the INT function described\n * on p. 60, chapter 7.\n*/\n\n// ---- constants ----\n\n/** K is the Gaussian gravitational constant. */\nconst K = 0.01720209895;\n// K from ch 33, p. 228, for example\n\n/** AU is one astronomical unit in km. */\nconst AU = 149597870;\n// from Appendix I, p, 407.\n\n/** SOblJ2000 sine obliquity at J2000. */\nconst SOblJ2000 = 0.397777156;\n/** COblJ2000 cosine obliquity at J2000. */\nconst COblJ2000 = 0.917482062;\n// SOblJ2000, COblJ2000 from ch 33, p. 228, for example\n\n/**\n * lightTime returns time for light to travel a given distance.\n * `dist` is distance in to earth in AU. \u221A(x\u00B2 + y\u00B2 + z\u00B2)\n * Result in seconds of time.\n * @param {Number} dist - distance in to earth in AU\n * @returns {Number} time for light to travel a given distance in seconds\n */\nfunction lightTime (dist) {\n // Formula given as (33.3) p. 224.\n return 0.0057755183 * dist\n}\n\n// ---- julian ----\n\n/**\n * Julian and Besselian years described in chapter 21, Precession.\n * T, Julian centuries since J2000 described in chapter 22, Nutation.\n */\n\n/** JMod is the Julian date of the modified Julian date epoch. */\nconst JMod = 2400000.5;\n\n/** J2000 is the Julian date corresponding to January 1.5, year 2000. */\nconst J2000 = 2451545.0;\n\n// Julian days of common epochs.\n// B1900, B1950 from p. 133\n/** Julian days of Julian epoch 1900 */\nconst J1900 = 2415020.0;\n/** Julian days of Besselian epoch 1900 */\nconst B1900 = 2415020.3135;\n/** Julian days of Besselian epoch 1950 */\nconst B1950 = 2433282.4235;\n\n// JulianYear and other common periods\n/** JulianYear in days */\nconst JulianYear = 365.25; // days\n/** JulianCentury in days */\nconst JulianCentury = 36525; // days\n/** BesselianYear in days; equals mean tropical year */\nconst BesselianYear = 365.2421988; // days\n/** Mean sidereal year */\nconst meanSiderealYear = 365.25636; // days\n\n/**\n * JulianYearToJDE returns the Julian ephemeris day for a Julian year.\n * @param {Number} jy - Julian year\n * @returns {Number} jde - Julian ephemeris day\n */\nfunction JulianYearToJDE (jy) {\n return J2000 + JulianYear * (jy - 2000)\n}\n\n/**\n * JDEToJulianYear returns a Julian year for a Julian ephemeris day.\n * @param {Number} jde - Julian ephemeris day\n * @returns {Number} jy - Julian year\n */\nfunction JDEToJulianYear (jde) {\n return 2000 + (jde - J2000) / JulianYear\n}\n\n/**\n * BesselianYearToJDE returns the Julian ephemeris day for a Besselian year.\n * @param {Number} by - Besselian year\n * @returns {Number} jde - Julian ephemeris day\n */\nfunction BesselianYearToJDE (by) {\n return B1900 + BesselianYear * (by - 1900)\n}\n\n/**\n * JDEToBesselianYear returns the Besselian year for a Julian ephemeris day.\n * @param {Number} jde - Julian ephemeris day\n * @returns {Number} by - Besselian year\n */\nfunction JDEToBesselianYear (jde) {\n return 1900 + (jde - B1900) / BesselianYear\n}\n\n/**\n * J2000Century returns the number of Julian centuries since J2000.\n *\n * The quantity appears as T in a number of time series.\n * @param {Number} jde - Julian ephemeris day\n * @returns {Number} number of Julian centuries since J2000\n */\nfunction J2000Century (jde) {\n // The formula is given in a number of places in the book, for example\n // (12.1) p. 87.\n // (22.1) p. 143.\n // (25.1) p. 163.\n return (jde - J2000) / JulianCentury\n}\n\n// ---- phase ----\n\n/**\n * illuminated returns the illuminated fraction of a body's disk.\n *\n * The illuminated body can be the Moon or a planet.\n *\n * @param {Number} i - phase angle in radians.\n * @returns {Number} illuminated fraction of a body's disk.\n */\nfunction illuminated (i) {\n // (41.1) p. 283, also (48.1) p. 345.\n return (1 + Math.cos(i)) * 0.5\n}\n\n/**\n * celestial coordinates in right ascension and declination\n * or ecliptic coordinates in longitude and latitude\n */\nclass Coord {\n /**\n * celestial coordinates in right ascension and declination\n * or ecliptic coordinates in longitude and latitude\n *\n * @param {number} ra - right ascension (or longitude)\n * @param {number} dec - declination (or latitude)\n * @param {number} [range] - distance\n * @param {number} [elongation] - elongation\n */\n constructor (ra, dec, range, elongation) {\n this._ra = ra || 0;\n this._dec = dec || 0;\n this.range = range;\n this.elongation = elongation;\n }\n\n /**\n * right ascension\n * @return {number}\n */\n get ra () {\n return this._ra\n }\n\n set ra (ra) {\n this._ra = ra;\n }\n\n /**\n * declination\n * @return {number}\n */\n get dec () {\n return this._dec\n }\n\n set dec (dec) {\n this._dec = dec;\n }\n\n /**\n * right ascension (or longitude)\n * @return {number}\n */\n get lon () {\n return this._ra\n }\n\n set lon (ra) {\n this._ra = ra;\n }\n\n /**\n * declination (or latitude)\n * @return {number}\n */\n get lat () {\n return this._dec\n }\n\n set lat (dec) {\n this._dec = dec;\n }\n}\n\n/**\n * Limb returns the position angle of the midpoint of an illuminated limb.\n *\n * The illuminated body can be the Moon or a planet.\n *\n * @param {Coord} equ - equatorial coordinates of the body `{ra, dec}` (in radians)\n * @param {Coord} appSun - apparent coordinates of the Sun `{ra, dec}` (In radians).\n * @returns {Number} position angle of the midpoint (in radians).\n */\nfunction limb (equ, appSun) {\n const \u03B1 = equ.ra;\n const \u03B4 = equ.dec;\n const \u03B10 = appSun.ra;\n const \u03B40 = appSun.dec;\n // Mentioned in ch 41, p. 283. Formula (48.5) p. 346\n const s\u03B4 = Math.sin(\u03B4);\n const c\u03B4 = Math.cos(\u03B4);\n const s\u03B40 = Math.sin(\u03B40);\n const c\u03B40 = Math.cos(\u03B40);\n const s\u03B10\u03B1 = Math.sin(\u03B10 - \u03B1);\n const c\u03B10\u03B1 = Math.cos(\u03B10 - \u03B1);\n let \u03C7 = Math.atan2(c\u03B40 * s\u03B10\u03B1, (s\u03B40 * c\u03B4 - c\u03B40 * s\u03B4 * c\u03B10\u03B1));\n if (\u03C7 < 0) {\n \u03C7 += 2 * Math.PI;\n }\n return \u03C7\n}\n\n// ---- math ----\n\n// In chapter 17, p. 109, Meeus recommends 10\u2032.\n/**\n * SmallAngle is threshold used by various routines for switching between\n * trigonometric functions and Pythagorean approximations.\n */\nconst SmallAngle = 10 * Math.PI / 180 / 60; // about .003 radians\n/** cosine of SmallAngle */\nconst CosSmallAngle = Math.cos(SmallAngle); // about .999996\n\n/**\n * pmod returns a positive floating-point x mod y.\n *\n * For a positive argument y, it returns a value in the range [0,y).\n *\n * @param {Number} x\n * @param {Number} y\n * @returns {Number} x % y - The result may not be useful if y is negative.\n */\nfunction pmod (x, y) {\n let r = x % y;\n if (r < 0) {\n r += y;\n }\n return r\n}\n\n/**\n * horner evaluates a polynomal with coefficients c at x. The constant\n * term is c[0].\n * @param {Number} x\n * @param {Number[]} c - coefficients; c[0] may be of type Number[]\n * @returns {Number}\n */\nfunction horner (x, ...c) {\n if (Array.isArray(c[0])) {\n c = c[0];\n }\n let i = c.length - 1;\n let y = c[i];\n while (i > 0) {\n i--;\n y = y * x + c[i];\n }\n return y\n}\n\n/**\n * FloorDiv returns the integer floor of the fractional value (x / y).\n * @param {Number} x\n * @param {Number} y\n * @returns {Number} (int)\n */\nfunction floorDiv (x, y) {\n const q = x / y;\n return Math.floor(q)\n}\n\n/**\n * Cmp compares two float64s and returns -1, 0, or 1 if a is <, ==, or > b,\n * respectively.\n * .\n * @param {Number} a\n * @param {Number} b\n * @returns {Number} comparison result\n */\nfunction cmp (a, b) {\n if (a < b) return -1\n if (a > b) return 1\n return 0\n}\n\n/**\n * shorthand function for Math.sin, Math.cos\n * @param {Number} \u03B5\n * @returns {Number[]} [sin(\u03B5), cos(\u03B5)]\n */\nfunction sincos (\u03B5) {\n return [Math.sin(\u03B5), Math.cos(\u03B5)]\n}\n\n/**\n * Convert degrees to radians\n * @param {Number} deg - Angle in degrees\n * @return {Number} Angle in radians\n */\nfunction toRad (deg) {\n return (Math.PI / 180.0) * deg\n}\n\n/**\n * Convert radians to degrees\n * @param {Number} rad - Angle in radians\n * @return {Number} Angle in degrees\n */\nfunction toDeg (rad) {\n return (180.0 / Math.PI) * rad\n}\n\n/**\n * separate fix `i` from fraction `f`\n * @param {Number} float\n * @returns {Array} [i, f]\n * {Number} i - (int) fix value\n * {Number} f - (float) fractional portion; always > 1\n */\nfunction modf (float) {\n const i = Math.trunc(float);\n const f = Math.abs(float - i);\n return [i, f]\n}\n\n/**\n * Rounds `float` value by precision\n * @param {Number} float - value to round\n * @param {Number} [precision] - (int) number of post decimal positions\n * @return {Number} rounded `float`\n */\nfunction round (float, precision = 14) {\n return parseFloat(float.toFixed(precision))\n}\n\nfunction errorCode (msg, code) {\n const err = new Error(msg);\n // @ts-ignore\n err.code = code;\n return err\n}\n\nvar base = {\n K,\n AU,\n SOblJ2000,\n COblJ2000,\n lightTime,\n JMod,\n J2000,\n J1900,\n B1900,\n B1950,\n JulianYear,\n JulianCentury,\n BesselianYear,\n meanSiderealYear,\n JulianYearToJDE,\n JDEToJulianYear,\n BesselianYearToJDE,\n JDEToBesselianYear,\n J2000Century,\n illuminated,\n Coord,\n limb,\n SmallAngle,\n CosSmallAngle,\n pmod,\n horner,\n floorDiv,\n cmp,\n sincos,\n toRad,\n toDeg,\n modf,\n round,\n errorCode\n};\n\nexports.AU = AU;\nexports.B1900 = B1900;\nexports.B1950 = B1950;\nexports.BesselianYear = BesselianYear;\nexports.BesselianYearToJDE = BesselianYearToJDE;\nexports.COblJ2000 = COblJ2000;\nexports.Coord = Coord;\nexports.CosSmallAngle = CosSmallAngle;\nexports.J1900 = J1900;\nexports.J2000 = J2000;\nexports.J2000Century = J2000Century;\nexports.JDEToBesselianYear = JDEToBesselianYear;\nexports.JDEToJulianYear = JDEToJulianYear;\nexports.JMod = JMod;\nexports.JulianCentury = JulianCentury;\nexports.JulianYear = JulianYear;\nexports.JulianYearToJDE = JulianYearToJDE;\nexports.K = K;\nexports.SOblJ2000 = SOblJ2000;\nexports.SmallAngle = SmallAngle;\nexports.cmp = cmp;\nexports[\"default\"] = base;\nexports.errorCode = errorCode;\nexports.floorDiv = floorDiv;\nexports.horner = horner;\nexports.illuminated = illuminated;\nexports.lightTime = lightTime;\nexports.limb = limb;\nexports.meanSiderealYear = meanSiderealYear;\nexports.modf = modf;\nexports.pmod = pmod;\nexports.round = round;\nexports.sincos = sincos;\nexports.toDeg = toDeg;\nexports.toRad = toRad;\n", "'use strict';\n\nObject.defineProperty(exports, '__esModule', { value: true });\n\nvar base = require('./base.cjs');\n\n/**\n * @copyright 2013 Sonia Keys\n * @copyright 2016 commenthol\n * @license MIT\n * @module interpolation\n */\n\nconst int = Math.trunc;\n\n/**\n * Error values returned by functions and methods in this package.\n * Defined here to help testing for specific errors.\n */\nconst errorNot3 = new Error('Argument y must be length 3');\nconst errorNot4 = new Error('Argument y must be length 4');\nconst errorNot5 = new Error('Argument y must be length 5');\nconst errorNoXRange = new Error('Argument x3 (or x5) cannot equal x1');\nconst errorNOutOfRange = new Error('Interpolating factor n must be in range -1 to 1');\nconst errorNoExtremum = new Error('No extremum in table');\nconst errorExtremumOutside = new Error('Extremum falls outside of table');\nconst errorZeroOutside = new Error('Zero falls outside of table');\nconst errorNoConverge = new Error('Failure to converge');\n\n/**\n * Len3 allows second difference interpolation.\n */\nclass Len3 {\n /**\n * NewLen3 prepares a Len3 object from a table of three rows of x and y values.\n *\n * X values must be equally spaced, so only the first and last are supplied.\n * X1 must not equal to x3. Y must be a slice of three y values.\n *\n * @throws Error\n * @param {Number} x1 - is the x value corresponding to the first y value of the table.\n * @param {Number} x3 - is the x value corresponding to the last y value of the table.\n * @param {Number[]} y - is all y values in the table. y.length should be >= 3.0\n */\n constructor (x1, x3, y) {\n if (y.length !== 3) {\n throw errorNot3\n }\n if (x3 === x1) {\n throw errorNoXRange\n }\n this.x1 = x1;\n this.x3 = x3;\n this.y = y;\n // differences. (3.1) p. 23\n this.a = y[1] - y[0];\n this.b = y[2] - y[1];\n this.c = this.b - this.a;\n // other intermediate values\n this.abSum = this.a + this.b;\n this.xSum = x3 + x1;\n this.xDiff = x3 - x1;\n }\n\n /**\n * InterpolateX interpolates for a given x value.\n */\n interpolateX (x) {\n const n = (2 * x - this.xSum) / this.xDiff;\n return this.interpolateN(n)\n }\n\n /**\n * InterpolateXStrict interpolates for a given x value,\n * restricting x to the range x1 to x3 given to the constructor NewLen3.\n */\n interpolateXStrict (x) {\n const n = (2 * x - this.xSum) / this.xDiff;\n const y = this.interpolateNStrict(n);\n return y\n }\n\n /**\n * InterpolateN interpolates for (a given interpolating factor n.\n *\n * This is interpolation formula (3.3)\n *\n * @param n - The interpolation factor n is x-x2 in units of the tabular x interval.\n * (See Meeus p. 24.)\n * @return {number} interpolation value\n */\n interpolateN (n) {\n return this.y[1] + n * 0.5 * (this.abSum + n * this.c)\n }\n\n /**\n * InterpolateNStrict interpolates for (a given interpolating factor n.\n *\n * @param {number} n - n is restricted to the range [-1..1] corresponding to the range x1 to x3\n * given to the constructor of Len3.\n * @return {number} interpolation value\n */\n interpolateNStrict (n) {\n if (n < -1 || n > 1) {\n throw errorNOutOfRange\n }\n return this.interpolateN(n)\n }\n\n /**\n * Extremum returns the x and y values at the extremum.\n *\n * Results are restricted to the range of the table given to the constructor\n * new Len3.\n */\n extremum () {\n if (this.c === 0) {\n throw errorNoExtremum\n }\n const n = this.abSum / (-2 * this.c); // (3.5), p. 25\n if (n < -1 || n > 1) {\n throw errorExtremumOutside\n }\n const x = 0.5 * (this.xSum + this.xDiff * n);\n const y = this.y[1] - (this.abSum * this.abSum) / (8 * this.c); // (3.4), p. 25\n return [x, y]\n }\n\n /**\n * Len3Zero finds a zero of the quadratic function represented by the table.\n *\n * That is, it returns an x value that yields y=0.\n *\n * Argument strong switches between two strategies for the estimation step.\n * when iterating to converge on the zero.\n *\n * Strong=false specifies a quick and dirty estimate that works well\n * for gentle curves, but can work poorly or fail on more dramatic curves.\n *\n * Strong=true specifies a more sophisticated and thus somewhat more\n * expensive estimate. However, if the curve has quick changes, This estimate\n * will converge more reliably and in fewer steps, making it a better choice.\n *\n * Results are restricted to the range of the table given to the constructor\n * NewLen3.\n */\n zero (strong) {\n let f;\n if (strong) {\n // (3.7), p. 27\n f = (n0) => {\n return n0 - (2 * this.y[1] + n0 * (this.abSum + this.c * n0)) /\n (this.abSum + 2 * this.c * n0)\n };\n } else {\n // (3.6), p. 26\n f = (n0) => {\n return -2 * this.y[1] / (this.abSum + this.c * n0)\n };\n }\n const [n0, ok] = iterate(0, f);\n if (!ok) {\n throw errorNoConverge\n }\n if (n0 > 1 || n0 < -1) {\n throw errorZeroOutside\n }\n return 0.5 * (this.xSum + this.xDiff * n0) // success\n }\n}\n\n/**\n * Len3ForInterpolateX is a special purpose Len3 constructor.\n *\n * Like NewLen3, it takes a table of x and y values, but it is not limited\n * to tables of 3 rows. An X value is also passed that represents the\n * interpolation target x value. Len3ForInterpolateX will locate the\n * appropriate three rows of the table for interpolating for x, and initialize\n * the Len3 object for those rows.\n *\n * @param {Number} x - is the target for interpolation\n * @param {Number} x1 - is the x value corresponding to the first y value of the table.\n * @param {Number} xN - is the x value corresponding to the last y value of the table.\n * @param {Number[]} y - is all y values in the table. y.length should be >= 3.0\n * @returns {Len3} interpolation value\n */\nfunction len3ForInterpolateX (x, x1, xN, y) {\n let y3 = y;\n if (y.length > 3) {\n const interval = (xN - x1) / (y.length - 1);\n if (interval === 0) {\n throw errorNoXRange\n }\n let nearestX = int((x - x1) / interval + 0.5);\n if (nearestX < 1) {\n nearestX = 1;\n } else if (nearestX > y.length - 2) {\n nearestX = y.length - 2;\n }\n y3 = y.slice(nearestX - 1, nearestX + 2);\n xN = x1 + (nearestX + 1) * interval;\n x1 = x1 + (nearestX - 1) * interval;\n }\n return new Len3(x1, xN, y3)\n}\n\n/**\n * @private\n * @param {Number} n0\n * @param {Function} f\n * @returns {Array}\n * {Number} n1\n * {Boolean} ok - if `false` failure to converge\n */\nconst iterate = function (n0, f) {\n for (let limit = 0; limit < 50; limit++) {\n const n1 = f(n0);\n if (!isFinite(n1) || isNaN(n1)) {\n break // failure to converge\n }\n if (Math.abs((n1 - n0) / n0) < 1e-15) {\n return [n1, true] // success\n }\n n0 = n1;\n }\n return [0, false] // failure to converge\n};\n\n/**\n * Len4Half interpolates a center value from a table of four rows.\n * @param {Number[]} y - 4 values\n * @returns {Number} interpolation result\n */\nfunction len4Half (y) {\n if (y.length !== 4) {\n throw errorNot4\n }\n // (3.12) p. 32\n return (9 * (y[1] + y[2]) - y[0] - y[3]) / 16\n}\n\n/**\n * Len5 allows fourth Difference interpolation.\n */\nclass Len5 {\n /**\n * NewLen5 prepares a Len5 object from a table of five rows of x and y values.\n *\n * X values must be equally spaced, so only the first and last are suppliethis.\n * X1 must not equal x5. Y must be a slice of five y values.\n */\n constructor (x1, x5, y) {\n if (y.length !== 5) {\n throw errorNot5\n }\n if (x5 === x1) {\n throw errorNoXRange\n }\n this.x1 = x1;\n this.x5 = x5;\n this.y = y;\n this.y3 = y[2];\n // differences\n this.a = y[1] - y[0];\n this.b = y[2] - y[1];\n this.c = y[3] - y[2];\n this.d = y[4] - y[3];\n\n this.e = this.b - this.a;\n this.f = this.c - this.b;\n this.g = this.d - this.c;\n\n this.h = this.f - this.e;\n this.j = this.g - this.f;\n\n this.k = this.j - this.h;\n // other intermediate values\n this.xSum = x5 + x1;\n this.xDiff = x5 - x1;\n this.interpCoeff = [ // (3.8) p. 28\n this.y3,\n (this.b + this.c) / 2 - (this.h + this.j) / 12,\n this.f / 2 - this.k / 24,\n (this.h + this.j) / 12,\n this.k / 24\n ];\n }\n\n /**\n * InterpolateX interpolates for (a given x value.\n */\n interpolateX (x) {\n const n = (4 * x - 2 * this.xSum) / this.xDiff;\n return this.interpolateN(n)\n }\n\n /**\n * InterpolateXStrict interpolates for a given x value,\n * restricting x to the range x1 to x5 given to the the constructor NewLen5.\n */\n interpolateXStrict (x) {\n const n = (4 * x - 2 * this.xSum) / this.xDiff;\n const y = this.interpolateNStrict(n);\n return y\n }\n\n /**\n * InterpolateN interpolates for (a given interpolating factor n.\n *\n * The interpolation factor n is x-x3 in units of the tabular x interval.\n * (See Meeus p. 28.)\n */\n interpolateN (n) {\n return base[\"default\"].horner(n, ...this.interpCoeff)\n }\n\n /**\n * InterpolateNStrict interpolates for (a given interpolating factor n.\n *\n * N is restricted to the range [-1..1]. This is only half the range given\n * to the constructor NewLen5, but is the recommendation given on p. 31.0\n */\n interpolateNStrict (n) {\n if (n < -1 || n > 1) {\n throw errorNOutOfRange\n }\n return base[\"default\"].horner(n, ...this.interpCoeff)\n }\n\n /**\n * Extremum returns the x and y values at the extremum.\n *\n * Results are restricted to the range of the table given to the constructor\n * NewLen5. (Meeus actually recommends restricting the range to one unit of\n * the tabular interval, but that seems a little harsh.)\n */\n extremum () {\n // (3.9) p. 29\n const nCoeff = [\n 6 * (this.b + this.c) - this.h - this.j,\n 0,\n 3 * (this.h + this.j),\n 2 * this.k\n ];\n const den = this.k - 12 * this.f;\n if (den === 0) {\n throw errorExtremumOutside\n }\n const [n0, ok] = iterate(0, function (n0) {\n return base[\"default\"].horner(n0, ...nCoeff) / den\n });\n if (!ok) {\n throw errorNoConverge\n }\n if (n0 < -2 || n0 > 2) {\n throw errorExtremumOutside\n }\n const x = 0.5 * this.xSum + 0.25 * this.xDiff * n0;\n const y = base[\"default\"].horner(n0, ...this.interpCoeff);\n return [x, y]\n }\n\n /**\n * Len5Zero finds a zero of the quartic function represented by the table.\n *\n * That is, it returns an x value that yields y=0.\n *\n * Argument strong switches between two strategies for the estimation step.\n * when iterating to converge on the zero.\n *\n * Strong=false specifies a quick and dirty estimate that works well\n * for gentle curves, but can work poorly or fail on more dramatic curves.\n *\n * Strong=true specifies a more sophisticated and thus somewhat more\n * expensive estimate. However, if the curve has quick changes, This estimate\n * will converge more reliably and in fewer steps, making it a better choice.\n *\n * Results are restricted to the range of the table given to the constructor\n * NewLen5.\n */\n zero (strong) {\n let f;\n if (strong) {\n // (3.11), p. 29\n const M = this.k / 24;\n const N = (this.h + this.j) / 12;\n const P = this.f / 2 - M;\n const Q = (this.b + this.c) / 2 - N;\n const numCoeff = [this.y3, Q, P, N, M];\n const denCoeff = [Q, 2 * P, 3 * N, 4 * M];\n f = function (n0) {\n return n0 -\n base[\"default\"].horner(n0, ...numCoeff) / base[\"default\"].horner(n0, ...denCoeff)\n };\n } else {\n // (3.10), p. 29\n const numCoeff = [\n -24 * this.y3,\n 0,\n this.k - 12 * this.f,\n -2 * (this.h + this.j),\n -this.k\n ];\n const den = 12 * (this.b + this.c) - 2 * (this.h + this.j);\n f = function (n0) {\n return base[\"default\"].horner(n0, ...numCoeff) / den\n };\n }\n const [n0, ok] = iterate(0, f);\n if (!ok) {\n throw errorNoConverge\n }\n if (n0 > 2 || n0 < -2) {\n throw errorZeroOutside\n }\n const x = 0.5 * this.xSum + 0.25 * this.xDiff * n0;\n return x\n }\n}\n\n/**\n * Lagrange performs interpolation with unequally-spaced abscissae.\n *\n * Given a table of X and Y values, interpolate a new y value for argument x.\n *\n * X values in the table do not have to be equally spaced; they do not even\n * have to be in order. They must however, be distinct.\n *\n * @param {Number} x - x-value of interpolation\n * @param {Array} table - `[[x0, y0], ... [xN, yN]]` of x, y values\n * @returns {Number} interpolation result `y` of `x`\n */\nfunction lagrange (x, table) {\n // method of BASIC program, p. 33.0\n let sum = 0;\n table.forEach((ti, i) => {\n const xi = ti[0];\n let prod = 1.0;\n table.forEach((tj, j) => {\n if (i !== j) {\n const xj = tj[0];\n prod *= (x - xj) / (xi - xj);\n }\n });\n sum += ti[1] * prod;\n });\n return sum\n}\n\n/**\n * LagrangePoly uses the formula of Lagrange to produce an interpolating\n * polynomial.\n *\n * X values in the table do not have to be equally spaced; they do not even\n * have to be in order. They must however, be distinct.\n *\n * The returned polynomial will be of degree n-1 where n is the number of rows\n * in the table. It can be evaluated for x using base.horner.\n *\n * @param {Array} table - `[[x0, y0], ... [xN, yN]]`\n * @returns {Array} - polynomial array\n */\nfunction lagrangePoly (table) {\n // Method not fully described by Meeus, but needed for (numerical solution\n // to Example 3.g.\n const sum = new Array(table.length).fill(0);\n const prod = new Array(table.length).fill(0);\n const last = table.length - 1;\n for (let i = 0; i < table.length; i++) {\n const xi = table[i][0] || table[i].x || 0;\n const yi = table[i][1] || table[i].y || 0;\n prod[last] = 1;\n let den = 1.0;\n let n = last;\n for (let j = 0; j < table.length; j++) {\n if (i !== j) {\n const xj = table[j][0] || table[j].x || 0;\n prod[n - 1] = prod[n] * -xj;\n for (let k = n; k < last; k++) {\n prod[k] -= prod[k + 1] * xj;\n }\n n--;\n den *= (xi - xj);\n }\n }\n prod.forEach((pj, j) => {\n sum[j] += yi * pj / den;\n });\n }\n return sum\n}\n\n/**\n * Linear Interpolation of x\n */\nfunction linear (x, x1, xN, y) {\n const interval = (xN - x1) / (y.length - 1);\n if (interval === 0) {\n throw errorNoXRange\n }\n let nearestX = Math.floor((x - x1) / interval);\n if (nearestX < 0) {\n nearestX = 0;\n } else if (nearestX > y.length - 2) {\n nearestX = y.length - 2;\n }\n const y2 = y.slice(nearestX, nearestX + 2);\n const x01 = x1 + nearestX * interval;\n return y2[0] + (y[1] - y[0]) * (x - x01) / interval\n}\n\nvar interp = {\n errorNot3,\n errorNot4,\n errorNot5,\n errorNoXRange,\n errorNOutOfRange,\n errorNoExtremum,\n errorExtremumOutside,\n errorZeroOutside,\n errorNoConverge,\n Len3,\n len3ForInterpolateX,\n iterate,\n len4Half,\n Len5,\n lagrange,\n lagrangePoly,\n linear\n};\n\nexports.Len3 = Len3;\nexports.Len5 = Len5;\nexports[\"default\"] = interp;\nexports.errorExtremumOutside = errorExtremumOutside;\nexports.errorNOutOfRange = errorNOutOfRange;\nexports.errorNoConverge = errorNoConverge;\nexports.errorNoExtremum = errorNoExtremum;\nexports.errorNoXRange = errorNoXRange;\nexports.errorNot3 = errorNot3;\nexports.errorNot4 = errorNot4;\nexports.errorNot5 = errorNot5;\nexports.errorZeroOutside = errorZeroOutside;\nexports.iterate = iterate;\nexports.lagrange = lagrange;\nexports.lagrangePoly = lagrangePoly;\nexports.len3ForInterpolateX = len3ForInterpolateX;\nexports.len4Half = len4Half;\nexports.linear = linear;\n", "'use strict';\n\nObject.defineProperty(exports, '__esModule', { value: true });\n\nvar base = require('./base.cjs');\nvar interpolation = require('./interpolation.cjs');\n\n/**\n * @copyright 2013 Sonia Keys\n * @copyright 2016 commenthol\n * @license MIT\n * @module angle\n */\nconst { abs, acos, asin, atan2, cos, hypot, sin, sqrt, tan } = Math;\n\n/**\n * `sep` returns the angular separation between two celestial bodies.\n *\n * The algorithm is numerically na\u00EFve, and while patched up a bit for\n * small separations, remains unstable for separations near \u03C0.\n *\n * @param {Coord} c1 - coordinate of celestial body 1\n * @param {Coord} c2 - coordinate of celestial body 2\n * @return {Number} angular separation between two celestial bodies\n */\nfunction sep (c1, c2) {\n const [sind1, cosd1] = base[\"default\"].sincos(c1.dec);\n const [sind2, cosd2] = base[\"default\"].sincos(c2.dec);\n const cd = sind1 * sind2 + cosd1 * cosd2 * cos(c1.ra - c2.ra); // (17.1) p. 109\n if (cd < base[\"default\"].CosSmallAngle) {\n return acos(cd)\n } else {\n const cosd = cos((c2.dec + c1.dec) / 2); // average dec of two bodies\n return hypot((c2.ra - c1.ra) * cosd, c2.dec - c1.dec) // (17.2) p. 109\n }\n}\n\n/**\n * `minSep` returns the minimum separation between two moving objects.\n *\n * The motion is represented as an ephemeris of three rows, equally spaced\n * in time. Jd1, jd3 are julian day times of the first and last rows.\n * R1, d1, r2, d2 are coordinates at the three times. They must each be\n * slices of length 3.0\n *\n * Result is obtained by computing separation at each of the three times\n * and interpolating a minimum. This may be invalid for sufficiently close\n * approaches.\n *\n * @throws Error\n * @param {Number} jd1 - Julian day - time at cs1[0], cs2[0]\n * @param {Number} jd3 - Julian day - time at cs1[2], cs2[2]\n * @param {Coord[]} cs1 - 3 coordinates of moving object 1\n * @param {Coord[]} cs2 - 3 coordinates of moving object 2\n * @param {function} [fnSep] - alternative `sep` function e.g. `angle.sepPauwels`, `angle.sepHav`\n * @return {Number} angular separation between two celestial bodies\n */\nfunction minSep (jd1, jd3, cs1, cs2, fnSep) {\n if (cs1.length !== 3 || cs2.length !== 3) {\n throw interpolation[\"default\"].errorNot3\n }\n const y = new Array(3);\n cs1.forEach((c, x) => {\n y[x] = sep(cs1[x], cs2[x]);\n });\n const d3 = new interpolation[\"default\"].Len3(jd1, jd3, y);\n const dMin = d3.extremum()[1];\n return dMin\n}\n\n/**\n * `minSepRect` returns the minimum separation between two moving objects.\n *\n * Like `minSep`, but using a method of rectangular coordinates that gives\n * accurate results even for close approaches.\n *\n * @throws Error\n * @param {Number} jd1 - Julian day - time at cs1[0], cs2[0]\n * @param {Number} jd3 - Julian day - time at cs1[2], cs2[2]\n * @param {Coord[]} cs1 - 3 coordinates of moving object 1\n * @param {Coord[]} cs2 - 3 coordinates of moving object 2\n * @return {Number} angular separation between two celestial bodies\n */\nfunction minSepRect (jd1, jd3, cs1, cs2) {\n if (cs1.length !== 3 || cs2.length !== 3) {\n throw interpolation[\"default\"].ErrorNot3\n }\n const uv = function (c1, c2) {\n const [sind1, cosd1] = base[\"default\"].sincos(c1.dec);\n const \u0394r = c2.ra - c1.ra;\n const tan\u0394r = tan(\u0394r);\n const tanh\u0394r = tan(\u0394r / 2);\n const K = 1 / (1 + sind1 * sind1 * tan\u0394r * tanh\u0394r);\n const sin\u0394d = sin(c2.dec - c1.dec);\n const u = -K * (1 - (sind1 / cosd1) * sin\u0394d) * cosd1 * tan\u0394r;\n const v = K * (sin\u0394d + sind1 * cosd1 * tan\u0394r * tanh\u0394r);\n return [u, v]\n };\n const us = new Array(3).fill(0);\n const vs = new Array(3).fill(0);\n cs1.forEach((c, x) => {\n [us[x], vs[x]] = uv(cs1[x], cs2[x]);\n });\n const u3 = new interpolation[\"default\"].Len3(-1, 1, us); // if line throws then bug not caller's fault.\n const v3 = new interpolation[\"default\"].Len3(-1, 1, vs); // if line throws then bug not caller's fault.\n const up0 = (us[2] - us[0]) / 2;\n const vp0 = (vs[2] - vs[0]) / 2;\n const up1 = us[0] + us[2] - 2 * us[1];\n const vp1 = vs[0] + vs[2] - 2 * vs[1];\n const up = up0;\n const vp = vp0;\n let dn = -(us[1] * up + vs[1] * vp) / (up * up + vp * vp);\n let n = dn;\n let u;\n let v;\n for (let limit = 0; limit < 10; limit++) {\n u = u3.interpolateN(n);\n v = v3.interpolateN(n);\n if (abs(dn) < 1e-5) {\n return hypot(u, v) // success\n }\n const up = up0 + n * up1;\n const vp = vp0 + n * vp1;\n dn = -(u * up + v * vp) / (up * up + vp * vp);\n n += dn;\n }\n throw new Error('minSepRect: failure to converge')\n}\n\n/**\n * haversine function (17.5) p. 115\n */\nfunction hav (a) {\n return 0.5 * (1 - Math.cos(a))\n}\n\n/**\n * `sepHav` returns the angular separation between two celestial bodies.\n *\n * The algorithm uses the haversine function and is superior to the na\u00EFve\n * algorithm of the Sep function.\n *\n * @param {Coord} c1 - coordinate of celestial body 1\n * @param {Coord} c2 - coordinate of celestial body 2\n * @return {Number} angular separation between two celestial bodies\n */\nfunction sepHav (c1, c2) {\n // using (17.5) p. 115\n return 2 * asin(sqrt(hav(c2.dec - c1.dec) +\n cos(c1.dec) * cos(c2.dec) * hav(c2.ra - c1.ra)))\n}\n\n/**\n * Same as `minSep` but uses function `sepHav` to return the minimum separation\n * between two moving objects.\n */\nfunction minSepHav (jd1, jd3, cs1, cs2) {\n return minSep(jd1, jd3, cs1, cs2)\n}\n\n/**\n * `sepPauwels` returns the angular separation between two celestial bodies.\n *\n * The algorithm is a numerically stable form of that used in `sep`.\n *\n * @param {Coord} c1 - coordinate of celestial body 1\n * @param {Coord} c2 - coordinate of celestial body 2\n * @return {Number} angular separation between two celestial bodies\n */\nfunction sepPauwels (c1, c2) {\n const [sind1, cosd1] = base[\"default\"].sincos(c1.dec);\n const [sind2, cosd2] = base[\"default\"].sincos(c2.dec);\n const cosdr = cos(c2.ra - c1.ra);\n const x = cosd1 * sind2 - sind1 * cosd2 * cosdr;\n const y = cosd2 * sin(c2.ra - c1.ra);\n const z = sind1 * sind2 + cosd1 * cosd2 * cosdr;\n return atan2(hypot(x, y), z)\n}\n\n/**\n * Same as `minSep` but uses function `sepPauwels` to return the minimum\n * separation between two moving objects.\n */\nfunction minSepPauwels (jd1, jd3, cs1, cs2) {\n return minSep(jd1, jd3, cs1, cs2)\n}\n\n/**\n * RelativePosition returns the position angle of one body with respect to\n * another.\n *\n * The position angle result `p` is measured counter-clockwise from North.\n * If negative then `p` is in the range of 90\u00B0 ... 270\u00B0\n *\n * ````\n * North\n * |\n * (p) ..|\n * . |\n * V |\n * c1 x------------x c2\n * |\n * ````\n *\n * @param {Coord} c1 - coordinate of celestial body 1\n * @param {Coord} c2 - coordinate of celestial body 2\n * @return {Number} position angle (p)\n */\nfunction relativePosition (c1, c2) {\n const [sin\u0394r, cos\u0394r] = base[\"default\"].sincos(c1.ra - c2.ra);\n const [sind2, cosd2] = base[\"default\"].sincos(c2.dec);\n const p = atan2(sin\u0394r, cosd2 * tan(c1.dec) - sind2 * cos\u0394r);\n return p\n}\n\nvar angle = {\n sep,\n minSep,\n minSepRect,\n hav,\n sepHav,\n minSepHav,\n sepPauwels,\n minSepPauwels,\n relativePosition\n};\n\nexports[\"default\"] = angle;\nexports.hav = hav;\nexports.minSep = minSep;\nexports.minSepHav = minSepHav;\nexports.minSepPauwels = minSepPauwels;\nexports.minSepRect = minSepRect;\nexports.relativePosition = relativePosition;\nexports.sep = sep;\nexports.sepHav = sepHav;\nexports.sepPauwels = sepPauwels;\n", "'use strict';\n\nObject.defineProperty(exports, '__esModule', { value: true });\n\n/**\n * @copyright 2013 Sonia Keys\n * @copyright 2016 commenthol\n * @license MIT\n * @module sexagesimal\n */\n/**\n * Sexagesimal functions\n */\n\n/**\n * Angle represents a general purpose angle.\n * Unit is radians.\n */\nclass Angle {\n /**\n * constructs a new Angle value from sign, degree, minute, and second\n * components.\n * @param {Number|Boolean} angleOrNeg - angle in radians or sign, true if negative (required to attribute -0\u00B030')\n * __Four arguments__\n * @param {Number} [d] - (int) degree\n * @param {Number} [m] - (int) minute\n * @param {Number} [s] - (float) second\n */\n constructor (angleOrNeg, d, m, s) {\n if (arguments.length === 1) {\n this.angle = Number(angleOrNeg);\n } else {\n this.setDMS(!!angleOrNeg, d, m, s);\n }\n }\n\n /**\n * SetDMS sets the value of an FAngle from sign, degree, minute, and second\n * components.\n * The receiver is returned as a convenience.\n * @param {Boolean} neg - sign, true if negative\n * @param {Number} d - (int) degree\n * @param {Number} m - (int) minute\n * @param {Number} s - (float) second\n * @returns {Angle}\n */\n setDMS (neg = false, d = 0, m = 0, s = 0.0) {\n this.angle = (DMSToDeg(neg, d, m, s) * Math.PI / 180);\n return this\n }\n\n /**\n * sets angle\n * @param {Number} angle - (float) angle in radians\n * @returns {Angle}\n */\n setAngle (angle) {\n this.angle = angle;\n return this\n }\n\n /**\n * Rad returns the angle in radians.\n * @returns {Number} angle in radians\n */\n rad () {\n return this.angle\n }\n\n /**\n * Deg returns the angle in degrees.\n * @returns {Number} angle in degree\n */\n deg () {\n return this.angle * 180 / Math.PI\n }\n\n /**\n * toDMS converts to parsed sexagesimal angle component.\n */\n toDMS () {\n return degToDMS(this.deg())\n }\n\n /**\n * Print angle in degree using `d\u00B0m\u00B4s.ss\u2033`\n * @param {Number} [precision] - precision of `s.ss`\n * @returns {String}\n */\n toString (precision) {\n let [neg, d, m, s] = this.toDMS();\n s = round(s, precision).toString().replace(/^0\\./, '.');\n const str = (neg ? '-' : '') +\n (d + '\u00B0') +\n (m + '\u2032') +\n (s + '\u2033');\n return str\n }\n\n /**\n * Print angle in degree using `d\u00B0.ff`\n * @param {Number} [precision] - precision of `.ff`\n * @returns {String}\n */\n toDegString (precision) {\n let [i, s] = modf(this.deg());\n s = round(s, precision).toString().replace(/^0\\./, '.');\n const str = (i + '\u00B0') + s;\n return str\n }\n}\n\n/**\n * HourAngle represents an angle corresponding to angular rotation of\n * the Earth in a specified time.\n *\n * Unit is radians.\n */\nclass HourAngle extends Angle {\n /**\n * NewHourAngle constructs a new HourAngle value from sign, hour, minute,\n * and second components.\n * @param {Boolean} neg\n * @param {Number} h - (int)\n * @param {Number} m - (int)\n * @param {Number} s - (float)\n * @constructor\n */\n\n /**\n * SetDMS sets the value of an FAngle from sign, degree, minute, and second\n * components.\n * The receiver is returned as a convenience.\n * @param {Boolean} neg - sign, true if negative\n * @param {Number} h - (int) hour\n * @param {Number} m - (int) minute\n * @param {Number} s - (float) second\n * @returns {Angle}\n */\n setDMS (neg = false, h = 0, m = 0, s = 0.0) {\n this.angle = (DMSToDeg(neg, h, m, s) * 15 * Math.PI / 180);\n return this\n }\n\n /**\n * Hour returns the hour angle as hours of time.\n * @returns hour angle\n */\n hour () {\n return this.angle * 12 / Math.PI // 12 = 180 / 15\n }\n\n deg () {\n return this.hour()\n }\n\n /**\n * Print angle in `H\u02B0M\u1D50s.ss\u02E2`\n * @param {Number} precision - precision of `s.ss`\n * @returns {String}\n */\n toString (precision) {\n let [neg, h, m, s] = this.toDMS();\n s = round(s, precision).toString().replace(/^0\\./, '.');\n const str = (neg ? '-' : '') +\n (h + '\u02B0') +\n (m + '\u1D50') +\n (s + '\u02E2');\n return str\n }\n}\n\n/**\n * DMSToDeg converts from parsed sexagesimal angle components to decimal\n * degrees.\n * @param {Boolean} neg - sign, true if negative\n * @param {Number} d - (int) degree\n * @param {Number} m - (int) minute\n * @param {Number} s - (float) second\n * @returns {Number} angle in degree\n */\nfunction DMSToDeg (neg, d, m, s) {\n s = (((d * 60 + m) * 60) + s) / 3600;\n if (neg) {\n return -s\n }\n return s\n}\n\n/**\n * DegToDMS converts from decimal degrees to parsed sexagesimal angle component.\n * @param {Number} deg - angle in degree\n * @returns {Array} [neg, d, m, s]\n * {Boolean} neg - sign, true if negative\n * {Number} d - (int) degree\n * {Number} m - (int) minute\n * {Number} s - (float) second\n */\nfunction degToDMS (deg) {\n const neg = (deg < 0);\n deg = Math.abs(deg);\n let [d, s] = modf(deg % 360);\n const [m, s1] = modf(s * 60);\n s = round(s1 * 60); // may introduce an error < 1e13\n return [neg, d, m, s]\n}\n\nclass RA extends HourAngle {\n /**\n * constructs a new RA value from hour, minute, and second components.\n * Negative values are not supported, RA wraps values larger than 24\n * to the range [0,24) hours.\n * @param {Number} h - (int) hour\n * @param {Number} m - (int) minute\n * @param {Number} s - (float) second\n */\n constructor (h = 0, m = 0, s = 0) {\n super(false, h, m, s);\n const args = [].slice.call(arguments);\n if (args.length === 1) {\n this.angle = h;\n } else {\n const hr = DMSToDeg(false, h, m, s) % 24;\n this.angle = hr * 15 * Math.PI / 180;\n }\n }\n\n hour () {\n const h = this.angle * 12 / Math.PI;\n return (24 + (h % 24)) % 24\n }\n}\n\n/**\n * Time Angle\n * Unit is time in seconds.\n */\nclass Time {\n /**\n * @param {boolean|number} negOrTimeInSecs - set `true` if negative; if type is number than time in seconds\n * @param {number} [h] - (int) hour\n * @param {number} [m] - (int) minute\n * @param {number} [s] - (float) second\n * @example\n * new sexa.Time(SECS_OF_DAY)\n * new sexa.Time(false, 15, 22, 7)\n */\n constructor (negOrTimeInSecs, h, m, s) {\n if (typeof negOrTimeInSecs === 'number') {\n this.time = negOrTimeInSecs;\n } else {\n this.setHMS(negOrTimeInSecs, h, m, s);\n }\n }\n\n setHMS (neg = false, h = 0, m = 0, s = 0) {\n s += ((h * 60 + m) * 60);\n if (neg) {\n s = -s;\n }\n this.time = s;\n }\n\n /**\n * @returns {Number} time in seconds.\n */\n sec () {\n return this.time\n }\n\n /**\n * @returns {Number} time in minutes.\n */\n min () {\n return this.time / 60\n }\n\n /**\n * @returns {Number} time in hours.\n */\n hour () {\n return this.time / 3600\n }\n\n /**\n * @returns {Number} time in days.\n */\n day () {\n return this.time / 3600 / 24\n }\n\n /**\n * @returns {Number} time in radians, where 1 day = 2 Pi radians.\n */\n rad () {\n return this.time * Math.PI / 12 / 3600\n }\n\n /**\n * convert time to HMS\n * @returns {Array} [neg, h, m, s]\n * {Boolean} neg - sign, true if negative\n * {Number} h - (int) hour\n * {Number} m - (int) minute\n * {Number} s - (float) second\n */\n toHMS () {\n let t = this.time;\n const neg = (t < 0);\n t = (neg ? -t : t);\n const h = Math.trunc(t / 3600);\n t = t - (h * 3600);\n const m = Math.trunc(t / 60);\n const s = t - (m * 60);\n return [neg, h, m, s]\n }\n\n /**\n * Print time using `H\u02B0M\u1D50s\u02E2.ss`\n * @param {Number} precision - precision of `.ss`\n * @returns {String}\n */\n toString (precision) {\n const [neg, h, m, s] = this.toHMS();\n let [si, sf] = modf(s);\n if (precision === 0) {\n si = round(s, 0);\n sf = 0;\n } else {\n sf = round(sf, precision).toString().substr(1);\n }\n const str = (neg ? '-' : '') +\n (h + '\u02B0') +\n (m + '\u1D50') +\n (si + '\u02E2') +\n (sf || '');\n return str\n }\n}\n\n// units\nconst angleFromDeg = (deg) => deg * Math.PI / 180;\nconst angleFromMin = (min) => min / 60 * Math.PI / 180;\nconst angleFromSec = (sec) => sec / 3600 * Math.PI / 180;\nconst degFromAngle = (angle) => angle * 180 / Math.PI;\nconst secFromAngle = (angle) => angle * 3600 * 180 / Math.PI;\nconst secFromHourAngle = (ha) => ha * 240 * 180 / Math.PI;\n\n/**\n * separate fix `i` from fraction `f`\n * @private\n * @param {Number} float\n * @returns {Array} [i, f]\n * {Number} i - (int) fix value\n * {Number} f - (float) fractional portion; always > 1\n */\nfunction modf (float) {\n const i = Math.trunc(float);\n const f = Math.abs(float - i);\n return [i, f]\n}\n\n/**\n * Rounds `float` value by precision\n * @private\n * @param {Number} float - value to round\n * @param {Number} [precision] - (int) number of post decimal positions\n * @return {Number} rounded `float`\n */\nfunction round (float, precision = 10) {\n return parseFloat(float.toFixed(precision))\n}\n\nvar sexa = {\n Angle,\n HourAngle,\n DMSToDeg,\n degToDMS,\n RA,\n Time,\n angleFromDeg,\n angleFromMin,\n angleFromSec,\n degFromAngle,\n secFromAngle,\n secFromHourAngle\n};\n\nexports.Angle = Angle;\nexports.DMSToDeg = DMSToDeg;\nexports.HourAngle = HourAngle;\nexports.RA = RA;\nexports.Time = Time;\nexports.angleFromDeg = angleFromDeg;\nexports.angleFromMin = angleFromMin;\nexports.angleFromSec = angleFromSec;\nexports[\"default\"] = sexa;\nexports.degFromAngle = degFromAngle;\nexports.degToDMS = degToDMS;\nexports.secFromAngle = secFromAngle;\nexports.secFromHourAngle = secFromHourAngle;\n", "'use strict';\n\nObject.defineProperty(exports, '__esModule', { value: true });\n\n/**\n * @copyright 2013 Sonia Keys\n * @copyright 2016 commenthol\n * @license MIT\n * @module globe\n */\n/**\n * Globe: Chapter 11, The Earth's Globe.\n *\n * Globe contains functions concerning the surface of the Earth idealized as\n * an ellipsoid of revolution.\n */\n\n/**\n * Ellipsoid represents an ellipsoid of revolution. */\nclass Ellipsoid {\n /**\n * @param {number} radius - equatorial radius\n * @param {number} flat - ellipsiod flattening\n */\n constructor (radius, flat) {\n this.radius = radius;\n this.flat = flat;\n }\n\n /** A is a common identifier for equatorial radius. */\n A () {\n return this.radius\n }\n\n /** B is a common identifier for polar radius. */\n B () {\n return this.radius * (1 - this.flat)\n }\n\n /** eccentricity of a meridian. */\n eccentricity () {\n return Math.sqrt((2 - this.flat) * this.flat)\n }\n\n /**\n * parallaxConstants computes parallax constants \u03C1 sin \u03C6\u2032 and \u03C1 cos \u03C6\u2032.\n *\n * Arguments are geographic latitude \u03C6 in radians and height h\n * in meters above the ellipsoid.\n *\n * @param {number} \u03C6 - geographic latitude in radians\n * @param {number} h - height in meters above the ellipsoid\n * @return {number[]} [\u03C1 sin \u03C6\u2032, \u03C1 cos \u03C6] parallax constants [\u03C1s\u03C6, \u03C1c\u03C6]\n */\n parallaxConstants (\u03C6, h) {\n const boa = 1 - this.flat;\n const su = Math.sin(Math.atan(boa * Math.tan(\u03C6)));\n const cu = Math.cos(Math.atan(boa * Math.tan(\u03C6)));\n const s = Math.sin(\u03C6);\n const c = Math.cos(\u03C6);\n const hoa = h * 1e-3 / this.radius;\n // (s, c float)\n const \u03C1s\u03C6 = su * boa + hoa * s;\n const \u03C1c\u03C6 = cu + hoa * c;\n return [\u03C1s\u03C6, \u03C1c\u03C6]\n }\n\n /**\n * rho is distance from Earth center to a point on the ellipsoid.\n *\n * Result unit is fraction of the equatorial radius.\n * @param {number} \u03C6 - geographic latitude in radians\n * @returns {number} // TODO\n */\n rho (\u03C6) {\n // Magic numbers...\n return 0.9983271 + 0.0016764 * Math.cos(2 * \u03C6) - 0.0000035 * Math.cos(4 * \u03C6)\n }\n\n /**\n * radiusAtLatitude returns the radius of the circle that is the parallel of\n * latitude at \u03C6.\n *\n * Result unit is Km.\n *\n * @param {number} \u03C6\n * @return {number} radius in km\n */\n radiusAtLatitude (\u03C6) {\n const s = Math.sin(\u03C6);\n const c = Math.cos(\u03C6);\n return this.A() * c / Math.sqrt(1 - (2 - this.flat) * this.flat * s * s)\n }\n\n /**\n * radiusOfCurvature of meridian at latitude \u03C6.\n *\n * Result unit is Km.\n *\n * @param {number} \u03C6\n * @return {number} radius in km\n */\n radiusOfCurvature (\u03C6) {\n const s = Math.sin(\u03C6);\n const e2 = (2 - this.flat) * this.flat;\n return this.A() * (1 - e2) / Math.pow(1 - e2 * s * s, 1.5)\n }\n\n /**\n * distance is distance between two points measured along the surface\n * of an ellipsoid.\n *\n * Accuracy is much better than that of approxAngularDistance or\n * approxLinearDistance.\n *\n * Result unit is Km.\n *\n * @param {Coord} c1\n * @param {Coord} c2\n * @return {number} radius in km\n */\n distance (c1, c2) {\n // From AA, ch 11, p 84.\n const [s2f, c2f] = sincos2((c1.lat + c2.lat) / 2);\n const [s2g, c2g] = sincos2((c1.lat - c2.lat) / 2);\n const [s2\u03BB, c2\u03BB] = sincos2((c1.lon - c2.lon) / 2);\n const s = s2g * c2\u03BB + c2f * s2\u03BB;\n const c = c2g * c2\u03BB + s2f * s2\u03BB;\n const \u03C9 = Math.atan(Math.sqrt(s / c));\n const r = Math.sqrt(s * c) / \u03C9;\n const d = 2 * \u03C9 * this.radius;\n const h1 = (3 * r - 1) / (2 * c);\n const h2 = (3 * r + 1) / (2 * s);\n return d * (1 + this.flat * (h1 * s2f * c2g - h2 * c2f * s2g))\n }\n}\n\n/** IAU 1976 values. Radius in Km. */\nconst Earth76 = new Ellipsoid(6378.14, 1 / 298.257);\n\n/**\n * RotationRate1996_5 is the rotational angular velocity of the Earth\n * with respect to the stars at the epoch 1996.5.\n *\n * Unit is radian/second.\n */\nconst RotationRate1996_5 = 7.292114992e-5; // eslint-disable-line camelcase\n\n/**\n * oneDegreeOfLongitude returns the length of one degree of longitude.\n *\n * Argument `rp` is the radius in Km of a circle that is a parallel of latitude\n * (as returned by Ellipsoid.radiusAtLatitude.)\n * Result is distance in Km along one degree of the circle.\n *\n * @param {number} rp\n * @return {number} distance in Km\n */\nfunction oneDegreeOfLongitude (rp) {\n return rp * Math.PI / 180\n}\n\n/**\n * oneDegreeOfLatitude returns the length of one degree of latitude.\n *\n * Argument `rm` is the radius in Km of curvature along a meridian.\n * (as returned by Ellipsoid.radiusOfCurvature.)\n * Result is distance in Km along one degree of the meridian.\n *\n * @param {number} rm\n * @return {number} distance in Km\n */\nfunction oneDegreeOfLatitude (rm) {\n return rm * Math.PI / 180\n}\n\n/**\n * geocentricLatitudeDifference returns geographic latitude - geocentric\n * latitude (\u03C6 - \u03C6\u2032) with given geographic latitude (\u03C6).\n *\n * Units are radians.\n * @param {number} \u03C6\n * @returns {number} difference in Deg\n */\nfunction geocentricLatitudeDifference (\u03C6) {\n // This appears to be an approximation with hard coded magic numbers.\n // No explanation is given in the text. The ellipsoid is not specified.\n // Perhaps the approximation works well enough for all ellipsoids?\n return (692.73 * Math.sin(2 * \u03C6) - 1.16 * Math.sin(4 * \u03C6)) * Math.PI / (180 * 3600)\n}\n\n/**\n * Coord represents geographic coordinates on the Earth.\n *\n * Longitude is measured positively westward from the Greenwich meridian.\n */\nclass Coord {\n /**\n * @param {number} lat - latitude (\u03C6) in radians\n * @param {number} lon - longitude (\u03C8, or L) in radians (measured positively westward)\n */\n constructor (lat = 0, lon = 0) {\n this.lat = lat;\n this.lon = lon;\n }\n}\n\n/**\n * approxAngularDistance returns the cosine of the angle between two points.\n *\n * The accuracy deteriorates at small angles.\n *\n * @param {Coord} p1 - Point 1\n * @param {Coord} p2 - Point 2\n * @returns {number} cosine `cos` of the angle between two points.\n * Use `d = Math.acos(cos)` to obtain geocentric angular distance in radians\n */\nfunction approxAngularDistance (p1, p2) {\n const s1 = Math.sin(p1.lat);\n const c1 = Math.cos(p1.lat);\n const s2 = Math.sin(p2.lat);\n const c2 = Math.cos(p2.lat);\n return s1 * s2 + c1 * c2 * Math.cos(p1.lon - p2.lon)\n}\n\n/**\n * approxLinearDistance computes a distance across the surface of the Earth.\n *\n * Approximating the Earth as a sphere, the function takes a geocentric angular\n * distance in radians and returns the corresponding linear distance in Km.\n *\n * @param {number} d - geocentric angular distance in radians\n * @returns linear distance in Km\n */\nfunction approxLinearDistance (d) {\n return 6371 * d\n}\n\n/**\n * @private\n */\nfunction sincos2 (x) {\n const s = Math.sin(x);\n const c = Math.cos(x);\n return [s * s, c * c]\n}\n\nvar globe = {\n Ellipsoid,\n Earth76,\n // eslint-disable-next-line camelcase\n RotationRate1996_5,\n oneDegreeOfLongitude,\n oneDegreeOfLatitude,\n geocentricLatitudeDifference,\n Coord,\n approxAngularDistance,\n approxLinearDistance\n};\n\nexports.Coord = Coord;\nexports.Earth76 = Earth76;\nexports.Ellipsoid = Ellipsoid;\nexports.RotationRate1996_5 = RotationRate1996_5;\nexports.approxAngularDistance = approxAngularDistance;\nexports.approxLinearDistance = approxLinearDistance;\nexports[\"default\"] = globe;\nexports.geocentricLatitudeDifference = geocentricLatitudeDifference;\nexports.oneDegreeOfLatitude = oneDegreeOfLatitude;\nexports.oneDegreeOfLongitude = oneDegreeOfLongitude;\n", "'use strict';\n\nObject.defineProperty(exports, '__esModule', { value: true });\n\nvar base = require('./base.cjs');\nvar sexagesimal = require('./sexagesimal.cjs');\nrequire('./globe.cjs');\n\n/**\n * @copyright 2013 Sonia Keys\n * @copyright 2016 commenthol\n * @license MIT\n * @module coord\n */\n\n/**\n * @typedef {object} LonLat\n * @property {Number} lon - Longitude (\u03BB) in radians\n * @property {Number} lat - Latitude (\u03B2) in radians\n */\n\n/**\n* Ecliptic coordinates are referenced to the plane of the ecliptic.\n*/\nclass Ecliptic {\n /**\n * IMPORTANT: Longitudes are measured *positively* westwards\n * e.g. Washington D.C. +77\u00B004; Vienna -16\u00B023'\n * @param {Number|LonLat} [lon] - Longitude (\u03BB) in radians\n * @param {Number} [lat] - Latitude (\u03B2) in radians\n */\n constructor (lon, lat) {\n if (typeof lon === 'object') {\n lat = lon.lat;\n lon = lon.lon;\n }\n this.lon = lon || 0;\n this.lat = lat || 0;\n }\n\n /**\n * converts ecliptic coordinates to equatorial coordinates.\n * @param {Number} \u03B5 - Obliquity\n * @returns {Equatorial}\n */\n toEquatorial (\u03B5) {\n const [\u03B5sin, \u03B5cos] = base[\"default\"].sincos(\u03B5);\n const [s\u03B2, c\u03B2] = base[\"default\"].sincos(this.lat);\n const [s\u03BB, c\u03BB] = base[\"default\"].sincos(this.lon);\n let ra = Math.atan2(s\u03BB * \u03B5cos - (s\u03B2 / c\u03B2) * \u03B5sin, c\u03BB); // (13.3) p. 93\n if (ra < 0) {\n ra += 2 * Math.PI;\n }\n const dec = Math.asin(s\u03B2 * \u03B5cos + c\u03B2 * \u03B5sin * s\u03BB); // (13.4) p. 93\n return new Equatorial(ra, dec)\n }\n}\n\n/**\n * Equatorial coordinates are referenced to the Earth's rotational axis.\n */\nclass Equatorial {\n /**\n * @param {Number} ra - (float) Right ascension (\u03B1) in radians\n * @param {Number} dec - (float) Declination (\u03B4) in radians\n */\n constructor (ra = 0, dec = 0) {\n this.ra = ra;\n this.dec = dec;\n }\n\n /**\n * EqToEcl converts equatorial coordinates to ecliptic coordinates.\n * @param {Number} \u03B5 - Obliquity\n * @returns {Ecliptic}\n */\n toEcliptic (\u03B5) {\n const [\u03B5sin, \u03B5cos] = base[\"default\"].sincos(\u03B5);\n const [s\u03B1, c\u03B1] = base[\"default\"].sincos(this.ra);\n const [s\u03B4, c\u03B4] = base[\"default\"].sincos(this.dec);\n const lon = Math.atan2(s\u03B1 * \u03B5cos + (s\u03B4 / c\u03B4) * \u03B5sin, c\u03B1); // (13.1) p. 93\n const lat = Math.asin(s\u03B4 * \u03B5cos - c\u03B4 * \u03B5sin * s\u03B1); // (13.2) p. 93\n return new Ecliptic(lon, lat)\n }\n\n /**\n * EqToHz computes Horizontal coordinates from equatorial coordinates.\n *\n * Argument g is the location of the observer on the Earth. Argument st\n * is the sidereal time at Greenwich.\n *\n * Sidereal time must be consistent with the equatorial coordinates.\n * If coordinates are apparent, sidereal time must be apparent as well.\n *\n * @param {GlobeCoord} g - coordinates of observer on Earth\n * @param {Number} st - sidereal time at Greenwich at time of observation\n * @returns {Horizontal}\n */\n toHorizontal (g, st) {\n const H = new sexagesimal[\"default\"].Time(st).rad() - g.lon - this.ra;\n const [sH, cH] = base[\"default\"].sincos(H);\n const [s\u03C6, c\u03C6] = base[\"default\"].sincos(g.lat);\n const [s\u03B4, c\u03B4] = base[\"default\"].sincos(this.dec);\n const azimuth = Math.atan2(sH, cH * s\u03C6 - (s\u03B4 / c\u03B4) * c\u03C6); // (13.5) p. 93\n const altitude = Math.asin(s\u03C6 * s\u03B4 + c\u03C6 * c\u03B4 * cH); // (13.6) p. 93\n return new Horizontal(azimuth, altitude)\n }\n\n /**\n * EqToGal converts equatorial coordinates to galactic coordinates.\n *\n * Equatorial coordinates must be referred to the standard equinox of B1950.0.\n * For conversion to B1950, see package precess and utility functions in\n * package \"common\".\n *\n * @returns {Galactic}\n */\n toGalactic () {\n const [sd\u03B1, cd\u03B1] = base[\"default\"].sincos(galacticNorth1950.ra - this.ra);\n const [sg\u03B4, cg\u03B4] = base[\"default\"].sincos(galacticNorth1950.dec);\n const [s\u03B4, c\u03B4] = base[\"default\"].sincos(this.dec);\n const x = Math.atan2(sd\u03B1, cd\u03B1 * sg\u03B4 - (s\u03B4 / c\u03B4) * cg\u03B4); // (13.7) p. 94\n // (galactic0Lon1950 + 1.5*math.Pi) = magic number of 303 deg\n const lon = (galactic0Lon1950 + 1.5 * Math.PI - x) % (2 * Math.PI); // (13.8) p. 94\n const lat = Math.asin(s\u03B4 * sg\u03B4 + c\u03B4 * cg\u03B4 * cd\u03B1);\n return new Galactic(lon, lat)\n }\n}\n\n/**\n * Horizontal coordinates are referenced to the local horizon of an observer\n * on the surface of the Earth.\n * @param {Number} az - Azimuth (A) in radians\n * @param {Number} alt - Altitude (h) in radians\n */\nclass Horizontal {\n constructor (az = 0, alt = 0) {\n this.az = az;\n this.alt = alt;\n }\n\n /**\n * transforms horizontal coordinates to equatorial coordinates.\n *\n * Sidereal time must be consistent with the equatorial coordinates.\n * If coordinates are apparent, sidereal time must be apparent as well.\n * @param {GlobeCoord} g - coordinates of observer on Earth (lat, lon)\n * @param {Number} st - sidereal time at Greenwich at time of observation.\n * @returns {Equatorial} (right ascension, declination)\n */\n toEquatorial (g, st) {\n const [sA, cA] = base[\"default\"].sincos(this.az);\n const [sh, ch] = base[\"default\"].sincos(this.alt);\n const [s\u03C6, c\u03C6] = base[\"default\"].sincos(g.lat);\n const H = Math.atan2(sA, cA * s\u03C6 + sh / ch * c\u03C6);\n const ra = base[\"default\"].pmod(new sexagesimal[\"default\"].Time(st).rad() - g.lon - H, 2 * Math.PI);\n const dec = Math.asin(s\u03C6 * sh - c\u03C6 * ch * cA);\n return new Equatorial(ra, dec)\n }\n}\n\n/**\n * Galactic coordinates are referenced to the plane of the Milky Way.\n * @param {Number} lon - Longitude (l) in radians\n * @param {Number} lat - Latitude (b) in radians\n */\nclass Galactic {\n constructor (lon = 0, lat = 0) {\n this.lon = lon;\n this.lat = lat;\n }\n\n /**\n * GalToEq converts galactic coordinates to equatorial coordinates.\n *\n * Resulting equatorial coordinates will be referred to the standard equinox of\n * B1950.0. For subsequent conversion to other epochs, see package precess and\n * utility functions in package meeus.\n *\n * @returns {Equatorial} (right ascension, declination)\n */\n toEquatorial () {\n // (-galactic0Lon1950 - math.Pi/2) = magic number of -123 deg\n const [sdLon, cdLon] = base[\"default\"].sincos(this.lon - galactic0Lon1950 - Math.PI / 2);\n const [sg\u03B4, cg\u03B4] = base[\"default\"].sincos(galacticNorth1950.dec);\n const [sb, cb] = base[\"default\"].sincos(this.lat);\n const y = Math.atan2(sdLon, cdLon * sg\u03B4 - (sb / cb) * cg\u03B4);\n // (galacticNorth1950.RA.Rad() - math.Pi) = magic number of 12.25 deg\n const ra = base[\"default\"].pmod(y + galacticNorth1950.ra - Math.PI, 2 * Math.PI);\n const dec = Math.asin(sb * sg\u03B4 + cb * cg\u03B4 * cdLon);\n return new Equatorial(ra, dec)\n }\n}\n\n/**\n* equatorial coords for galactic north\n* IAU B1950.0 coordinates of galactic North Pole\n*/\nconst galacticNorth = new Equatorial(\n new sexagesimal[\"default\"].RA(12, 49, 0).rad(),\n 27.4 * Math.PI / 180\n);\nconst galacticNorth1950 = galacticNorth;\n\n/**\n* Galactic Longitude 0\u00B0\n* Meeus gives 33 as the origin of galactic longitudes relative to the\n* ascending node of of the galactic equator. 33 + 90 = 123, the IAU\n* value for origin relative to the equatorial pole.\n*/\nconst galacticLon0 = 33 * Math.PI / 180;\nconst galactic0Lon1950 = galacticLon0;\n\nvar coord = {\n Ecliptic,\n Equatorial,\n Horizontal,\n Galactic,\n galacticNorth,\n galacticNorth1950,\n galacticLon0,\n galactic0Lon1950\n};\n\nexports.Ecliptic = Ecliptic;\nexports.Equatorial = Equatorial;\nexports.Galactic = Galactic;\nexports.Horizontal = Horizontal;\nexports[\"default\"] = coord;\nexports.galactic0Lon1950 = galactic0Lon1950;\nexports.galacticLon0 = galacticLon0;\nexports.galacticNorth = galacticNorth;\nexports.galacticNorth1950 = galacticNorth1950;\n", "'use strict';\n\nObject.defineProperty(exports, '__esModule', { value: true });\n\nvar base = require('./base.cjs');\nvar sexagesimal = require('./sexagesimal.cjs');\n\n/**\n * @copyright 2013 Sonia Keys\n * @copyright 2016 commenthol\n * @license MIT\n * @module nutation\n */\n\n// Nutation: Chapter 22, Nutation and the Obliquity of the Ecliptic.\n\n/**\n * Nutation returns nutation in longitude (\u0394\u03C8) and nutation in obliquity (\u0394\u03B5)\n * for a given JDE.\n *\n * JDE = UT + \u0394T, see package.\n *\n * Computation is by 1980 IAU theory, with terms < .0003\u2033 neglected.\n *\n * Result units are radians.\n *\n * @param {number} jde - Julian ephemeris day\n * @return {number[]} [\u0394\u03C8, \u0394\u03B5] - [longitude, obliquity] in radians\n */\nfunction nutation (jde) {\n const T = base[\"default\"].J2000Century(jde);\n // Mean elongation of the Moon from the sun\n const D = base[\"default\"].horner(T,\n 297.85036, 445267.11148, -0.0019142, 1.0 / 189474) * Math.PI / 180;\n // Mean anomaly of the Sun (Earth)\n const M = base[\"default\"].horner(T,\n 357.52772, 35999.050340, -0.0001603, -1.0 / 300000) * Math.PI / 180;\n // Mean anomaly of the Moon\n const N = base[\"default\"].horner(T,\n 134.96298, 477198.867398, 0.0086972, 1.0 / 56250) * Math.PI / 180;\n // Moon's argument of latitude\n const F = base[\"default\"].horner(T,\n 93.27191, 483202.017538, -0.0036825, 1.0 / 327270) * Math.PI / 180;\n // Longitude of the ascending node of the Moon's mean orbit on the ecliptic, measured from mean equinox of date\n const \u03A9 = base[\"default\"].horner(T,\n 125.04452, -1934.136261, 0.0020708, 1.0 / 450000) * Math.PI / 180;\n let \u0394\u03C8 = 0;\n let \u0394\u03B5 = 0;\n // sum in reverse order to accumulate smaller terms first\n for (let i = table22A.length - 1; i >= 0; i--) {\n const row = table22A[i];\n const arg = row.d * D + row.m * M + row.n * N + row.f * F + row.\u03C9 * \u03A9;\n const [s, c] = base[\"default\"].sincos(arg);\n \u0394\u03C8 += s * (row.s0 + row.s1 * T);\n \u0394\u03B5 += c * (row.c0 + row.c1 * T);\n }\n \u0394\u03C8 *= 0.0001 / 3600 * (Math.PI / 180);\n \u0394\u03B5 *= 0.0001 / 3600 * (Math.PI / 180);\n return [\u0394\u03C8, \u0394\u03B5] // (\u0394\u03C8, \u0394\u03B5 float)\n}\n/**\n * ApproxNutation returns a fast approximation of nutation in longitude (\u0394\u03C8)\n * and nutation in obliquity (\u0394\u03B5) for a given JDE.\n *\n * Accuracy is 0.5\u2033 in \u0394\u03C8, 0.1\u2033 in \u0394\u03B5.\n *\n * Result units are radians.\n *\n * @param {number} jde - Julian ephemeris day\n * @return {number[]} [\u0394\u03C8, \u0394\u03B5] - [longitude, obliquity] in radians\n */\nfunction approxNutation (jde) {\n const T = (jde - base[\"default\"].J2000) / 36525;\n const \u03A9 = (125.04452 - 1934.136261 * T) * Math.PI / 180;\n const L = (280.4665 + 36000.7698 * T) * Math.PI / 180;\n const N = (218.3165 + 481267.8813 * T) * Math.PI / 180;\n const [s\u03A9, c\u03A9] = base[\"default\"].sincos(\u03A9);\n const [s2L, c2L] = base[\"default\"].sincos(2 * L);\n const [s2N, c2N] = base[\"default\"].sincos(2 * N);\n const [s2\u03A9, c2\u03A9] = base[\"default\"].sincos(2 * \u03A9);\n const \u0394\u03C8 = (-17.2 * s\u03A9 - 1.32 * s2L - 0.23 * s2N + 0.21 * s2\u03A9) / 3600 * (Math.PI / 180);\n const \u0394\u03B5 = (9.2 * c\u03A9 + 0.57 * c2L + 0.1 * c2N - 0.09 * c2\u03A9) / 3600 * (Math.PI / 180);\n return [\u0394\u03C8, \u0394\u03B5] // (\u0394\u03C8, \u0394\u03B5 float)\n}\n\n/**\n * MeanObliquity returns mean obliquity (\u03B5\u2080) following the IAU 1980\n * polynomial.\n *\n * Accuracy is 1\u2033 over the range 1000 to 3000 years and 10\u2033 over the range\n * 0 to 4000 years.\n *\n * Result unit is radians.\n *\n * @param {number} jde - Julian ephemeris day\n * @return {number} mean obliquity (\u03B5\u2080)\n */\nfunction meanObliquity (jde) {\n // (22.2) p. 147\n return base[\"default\"].horner(\n base[\"default\"].J2000Century(jde),\n new sexagesimal[\"default\"].Angle(false, 23, 26, 21.448).rad(),\n -46.815 / 3600 * (Math.PI / 180),\n -0.00059 / 3600 * (Math.PI / 180),\n 0.001813 / 3600 * (Math.PI / 180)\n )\n}\n\n/**\n * MeanObliquityLaskar returns mean obliquity (\u03B5\u2080) following the Laskar\n * 1986 polynomial.\n *\n * Accuracy over the range 1000 to 3000 years is .01\u2033.\n *\n * Accuracy over the valid date range of -8000 to +12000 years is\n * \"a few seconds.\"\n *\n * Result unit is radians.\n *\n * @param {number} jde - Julian ephemeris day\n * @return {number} mean obliquity (\u03B5\u2080)\n */\nfunction meanObliquityLaskar (jde) {\n // (22.3) p. 147\n return base[\"default\"].horner(\n base[\"default\"].J2000Century(jde) * 0.01,\n new sexagesimal[\"default\"].Angle(false, 23, 26, 21.448).rad(),\n -4680.93 / 3600 * (Math.PI / 180),\n -1.55 / 3600 * (Math.PI / 180),\n 1999.25 / 3600 * (Math.PI / 180),\n -51.38 / 3600 * (Math.PI / 180),\n -249.67 / 3600 * (Math.PI / 180),\n -39.05 / 3600 * (Math.PI / 180),\n 7.12 / 3600 * (Math.PI / 180),\n 27.87 / 3600 * (Math.PI / 180),\n 5.79 / 3600 * (Math.PI / 180),\n 2.45 / 3600 * (Math.PI / 180)\n )\n}\n\n/**\n * NutationInRA returns \"nutation in right ascension\" or \"equation of the\n * equinoxes.\"\n *\n * Result is an angle in radians.\n *\n * @param {number} jde - Julian ephemeris day\n * @return {number} nutation in right ascension\n */\nfunction nutationInRA (jde) {\n const [\u0394\u03C8, \u0394\u03B5] = nutation(jde);\n const \u03B50 = meanObliquity(jde);\n return \u0394\u03C8 * Math.cos(\u03B50 + \u0394\u03B5)\n}\n\nconst table22A = (function () {\n const PROPS = 'd,m,n,f,\u03C9,s0,s1,c0,c1'.split(',');\n const tab = [\n [0, 0, 0, 0, 1, -171996, -174.2, 92025, 8.9],\n [-2, 0, 0, 2, 2, -13187, -1.6, 5736, -3.1],\n [0, 0, 0, 2, 2, -2274, -0.2, 977, -0.5],\n [0, 0, 0, 0, 2, 2062, 0.2, -895, 0.5],\n [0, 1, 0, 0, 0, 1426, -3.4, 54, -0.1],\n [0, 0, 1, 0, 0, 712, 0.1, -7, 0],\n [-2, 1, 0, 2, 2, -517, 1.2, 224, -0.6],\n [0, 0, 0, 2, 1, -386, -0.4, 200, 0],\n [0, 0, 1, 2, 2, -301, 0, 129, -0.1],\n [-2, -1, 0, 2, 2, 217, -0.5, -95, 0.3],\n [-2, 0, 1, 0, 0, -158, 0, 0, 0],\n [-2, 0, 0, 2, 1, 129, 0.1, -70, 0],\n [0, 0, -1, 2, 2, 123, 0, -53, 0],\n [2, 0, 0, 0, 0, 63, 0, 0, 0],\n [0, 0, 1, 0, 1, 63, 0.1, -33, 0],\n [2, 0, -1, 2, 2, -59, 0, 26, 0],\n [0, 0, -1, 0, 1, -58, -0.1, 32, 0],\n [0, 0, 1, 2, 1, -51, 0, 27, 0],\n [-2, 0, 2, 0, 0, 48, 0, 0, 0],\n [0, 0, -2, 2, 1, 46, 0, -24, 0],\n [2, 0, 0, 2, 2, -38, 0, 16, 0],\n [0, 0, 2, 2, 2, -31, 0, 13, 0],\n [0, 0, 2, 0, 0, 29, 0, 0, 0],\n [-2, 0, 1, 2, 2, 29, 0, -12, 0],\n [0, 0, 0, 2, 0, 26, 0, 0, 0],\n [-2, 0, 0, 2, 0, -22, 0, 0, 0],\n [0, 0, -1, 2, 1, 21, 0, -10, 0],\n [0, 2, 0, 0, 0, 17, -0.1, 0, 0],\n [2, 0, -1, 0, 1, 16, 0, -8, 0],\n [-2, 2, 0, 2, 2, -16, 0.1, 7, 0],\n [0, 1, 0, 0, 1, -15, 0, 9, 0],\n [-2, 0, 1, 0, 1, -13, 0, 7, 0],\n [0, -1, 0, 0, 1, -12, 0, 6, 0],\n [0, 0, 2, -2, 0, 11, 0, 0, 0],\n [2, 0, -1, 2, 1, -10, 0, 5, 0],\n [2, 0, 1, 2, 2, -8, 0, 3, 0],\n [0, 1, 0, 2, 2, 7, 0, -3, 0],\n [-2, 1, 1, 0, 0, -7, 0, 0, 0],\n [0, -1, 0, 2, 2, -7, 0, 3, 0],\n [2, 0, 0, 2, 1, -7, 0, 3, 0],\n [2, 0, 1, 0, 0, 6, 0, 0, 0],\n [-2, 0, 2, 2, 2, 6, 0, -3, 0],\n [-2, 0, 1, 2, 1, 6, 0, -3, 0],\n [2, 0, -2, 0, 1, -6, 0, 3, 0],\n [2, 0, 0, 0, 1, -6, 0, 3, 0],\n [0, -1, 1, 0, 0, 5, 0, 0, 0],\n [-2, -1, 0, 2, 1, -5, 0, 3, 0],\n [-2, 0, 0, 0, 1, -5, 0, 3, 0],\n [0, 0, 2, 2, 1, -5, 0, 3, 0],\n [-2, 0, 2, 0, 1, 4, 0, 0, 0],\n [-2, 1, 0, 2, 1, 4, 0, 0, 0],\n [0, 0, 1, -2, 0, 4, 0, 0, 0],\n [-1, 0, 1, 0, 0, -4, 0, 0, 0],\n [-2, 1, 0, 0, 0, -4, 0, 0, 0],\n [1, 0, 0, 0, 0, -4, 0, 0, 0],\n [0, 0, 1, 2, 0, 3, 0, 0, 0],\n [0, 0, -2, 2, 2, -3, 0, 0, 0],\n [-1, -1, 1, 0, 0, -3, 0, 0, 0],\n [0, 1, 1, 0, 0, -3, 0, 0, 0],\n [0, -1, 1, 2, 2, -3, 0, 0, 0],\n [2, -1, -1, 2, 2, -3, 0, 0, 0],\n [0, 0, 3, 2, 2, -3, 0, 0, 0],\n [2, -1, 0, 2, 2, -3, 0, 0, 0]\n ];\n\n return tab.map((row) => {\n const o = {};\n PROPS.forEach((p, i) => {\n o[p] = row[i];\n });\n return o\n })\n})();\n\nvar nutation$1 = {\n nutation,\n approxNutation,\n meanObliquity,\n meanObliquityLaskar,\n nutationInRA\n};\n\nexports.approxNutation = approxNutation;\nexports[\"default\"] = nutation$1;\nexports.meanObliquity = meanObliquity;\nexports.meanObliquityLaskar = meanObliquityLaskar;\nexports.nutation = nutation;\nexports.nutationInRA = nutationInRA;\n", "'use strict';\n\nObject.defineProperty(exports, '__esModule', { value: true });\n\nvar base = require('./base.cjs');\n\n/**\n * @copyright 2013 Sonia Keys\n * @copyright 2016 commenthol\n * @license MIT\n * @module elementequinox\n */\n\n/**\n * Elements are the orbital elements of a solar system object which change\n * from one equinox to another.\n *\n * @param {Number} inc - inclination\n * @param {Number} node - longitude of ascending node (\u03A9)\n * @param {Number} peri - argument of perihelion (\u03C9)\n */\nclass Elements {\n constructor (inc, node, peri) {\n if (typeof inc === 'object') {\n node = inc.pode;\n peri = inc.peri;\n inc = inc.inc;\n }\n this.inc = inc || 0;\n this.node = node || 0;\n this.peri = peri || 0;\n }\n}\n\n// (24.4) p. 161\nconst S = 0.0001139788;\nconst C = 0.9999999935;\n/**\n * ReduceB1950ToJ2000 reduces orbital elements of a solar system body from\n * equinox B1950 to J2000.\n *\n * @param {Elements} eFrom\n * @returns {Elements} eTo\n */\nfunction reduceB1950ToJ2000 (eFrom) {\n const W = eFrom.node - 174.298782 * Math.PI / 180;\n const [si, ci] = base[\"default\"].sincos(eFrom.inc);\n const [sW, cW] = base[\"default\"].sincos(W);\n const A = si * sW;\n const B = C * si * cW - S * ci;\n const eTo = new Elements();\n eTo.inc = Math.asin(Math.hypot(A, B));\n eTo.node = base[\"default\"].pmod(174.997194 * Math.PI / 180 + Math.atan2(A, B),\n 2 * Math.PI);\n eTo.peri = base[\"default\"].pmod(eFrom.peri + Math.atan2(-S * sW, C * si - S * ci * cW),\n 2 * Math.PI);\n return eTo\n}\n\nconst Lp = 4.50001688 * Math.PI / 180;\nconst L = 5.19856209 * Math.PI / 180;\nconst J = 0.00651966 * Math.PI / 180;\n\n/**\n * ReduceB1950ToJ2000 reduces orbital elements of a solar system body from\n * equinox B1950 in the FK4 system to equinox J2000 in the FK5 system.\n *\n * @param {Elements} eFrom\n * @returns {Elements} eTo\n */\nfunction reduceB1950FK4ToJ2000FK5 (eFrom) {\n const W = L + eFrom.node;\n const [si, ci] = base[\"default\"].sincos(eFrom.inc);\n const [sJ, cJ] = base[\"default\"].sincos(J);\n const [sW, cW] = base[\"default\"].sincos(W);\n const eTo = new Elements();\n eTo.inc = Math.acos(ci * cJ - si * sJ * cW);\n eTo.node = base[\"default\"].pmod(Math.atan2(si * sW, ci * sJ + si * cJ * cW) - Lp,\n 2 * Math.PI);\n eTo.peri = base[\"default\"].pmod(eFrom.peri + Math.atan2(sJ * sW, si * cJ + ci * sJ * cW),\n 2 * Math.PI);\n return eTo\n}\n\nvar elementequinox = {\n Elements,\n reduceB1950ToJ2000,\n reduceB1950FK4ToJ2000FK5\n};\n\nexports.Elements = Elements;\nexports[\"default\"] = elementequinox;\nexports.reduceB1950FK4ToJ2000FK5 = reduceB1950FK4ToJ2000FK5;\nexports.reduceB1950ToJ2000 = reduceB1950ToJ2000;\n", "'use strict';\n\nObject.defineProperty(exports, '__esModule', { value: true });\n\nvar base = require('./base.cjs');\nvar coord = require('./coord.cjs');\nvar elementequinox = require('./elementequinox.cjs');\nvar nutation = require('./nutation.cjs');\nvar sexagesimal = require('./sexagesimal.cjs');\n\n/**\n * @copyright 2013 Sonia Keys\n * @copyright 2016 commenthol\n * @license MIT\n * @module precess\n */\n\n/**\n * approxAnnualPrecession returns approximate annual precision in right\n * ascension and declination.\n *\n * The two epochs should be within a few hundred years.\n * The declinations should not be too close to the poles.\n *\n * @param {Equatorial} eqFrom\n * @param {Number} epochFrom - use `base.JDEToJulianYear(year)` to get epoch\n * @param {Number} epochTo - use `base.JDEToJulianYear(year)` to get epoch\n * @returns {Object}\n * {sexa.HourAngle} seconds of right ascension\n * {sexa.Angle} seconds of Declination\n */\nfunction approxAnnualPrecession (eqFrom, epochFrom, epochTo) {\n const [m, na, nd] = mn(epochFrom, epochTo);\n const [sa, ca] = base[\"default\"].sincos(eqFrom.ra);\n // (21.1) p. 132\n const \u0394\u03B1s = m + na * sa * Math.tan(eqFrom.dec); // seconds of RA\n const \u0394\u03B4s = nd * ca; // seconds of Dec\n const ra = new sexagesimal.HourAngle(false, 0, 0, \u0394\u03B1s).rad();\n const dec = new sexagesimal.Angle(false, 0, 0, \u0394\u03B4s).rad();\n return { ra, dec }\n}\n\n/**\n * @param {Number} epochFrom - use `base.JDEToJulianYear(year)` to get epoch\n * @param {Number} epochTo - use `base.JDEToJulianYear(year)` to get epoch\n * @returns {Number[]}\n */\nfunction mn (epochFrom, epochTo) {\n const T = (epochTo - epochFrom) * 0.01;\n const m = 3.07496 + 0.00186 * T;\n const na = 1.33621 - 0.00057 * T;\n const nd = 20.0431 - 0.0085 * T;\n return [m, na, nd]\n}\n\n/**\n * ApproxPosition uses ApproxAnnualPrecession to compute a simple and quick\n * precession while still considering proper motion.\n *\n * @param {Equatorial} eqFrom\n * @param {Number} epochFrom\n * @param {Number} epochTo\n * @param {Number} m\u03B1 - in radians\n * @param {Number} m\u03B4 - in radians\n * @returns {Equatorial} eqTo\n */\nfunction approxPosition (eqFrom, epochFrom, epochTo, m\u03B1, m\u03B4) {\n const { ra, dec } = approxAnnualPrecession(eqFrom, epochFrom, epochTo);\n const dy = epochTo - epochFrom;\n const eqTo = new coord.Equatorial();\n eqTo.ra = eqFrom.ra + (ra + m\u03B1) * dy;\n eqTo.dec = eqFrom.dec + (dec + m\u03B4) * dy;\n return eqTo\n}\n\n// constants\nconst d = Math.PI / 180;\nconst s = d / 3600;\n\n// coefficients from (21.2) p. 134\nconst \u03B6T = [2306.2181 * s, 1.39656 * s, -0.000139 * s];\nconst zT = [2306.2181 * s, 1.39656 * s, -0.000139 * s];\nconst \u03B8T = [2004.3109 * s, -0.8533 * s, -0.000217 * s];\n// coefficients from (21.3) p. 134\nconst \u03B6t = [2306.2181 * s, 0.30188 * s, 0.017998 * s];\nconst zt = [2306.2181 * s, 1.09468 * s, 0.018203 * s];\nconst \u03B8t = [2004.3109 * s, -0.42665 * s, -0.041833 * s];\n\n/**\n * Precessor represents precession from one epoch to another.\n *\n * Construct with NewPrecessor, then call method Precess.\n * After construction, Precess may be called multiple times to precess\n * different coordinates with the same initial and final epochs.\n */\nclass Precessor {\n /**\n * constructs a Precessor object and initializes it to precess\n * coordinates from epochFrom to epochTo.\n * @param {Number} epochFrom\n * @param {Number} epochTo\n */\n constructor (epochFrom, epochTo) {\n // (21.2) p. 134\n let \u03B6Coeff = \u03B6t;\n let zCoeff = zt;\n let \u03B8Coeff = \u03B8t;\n if (epochFrom !== 2000) {\n const T = (epochFrom - 2000) * 0.01;\n \u03B6Coeff = [\n base[\"default\"].horner(T, ...\u03B6T),\n 0.30188 * s - 0.000344 * s * T,\n 0.017998 * s\n ];\n zCoeff = [\n base[\"default\"].horner(T, ...zT),\n 1.09468 * s + 0.000066 * s * T,\n 0.018203 * s\n ];\n \u03B8Coeff = [\n base[\"default\"].horner(T, ...\u03B8T),\n -0.42665 * s - 0.000217 * s * T,\n -0.041833 * s\n ];\n }\n const t = (epochTo - epochFrom) * 0.01;\n this.\u03B6 = base[\"default\"].horner(t, ...\u03B6Coeff) * t;\n this.z = base[\"default\"].horner(t, ...zCoeff) * t;\n const \u03B8 = base[\"default\"].horner(t, ...\u03B8Coeff) * t;\n this.s\u03B8 = Math.sin(\u03B8);\n this.c\u03B8 = Math.cos(\u03B8);\n }\n\n /**\n * Precess precesses coordinates eqFrom, leaving result in eqTo.\n *\n * @param {Equatorial} eqFrom\n * @returns {Equatorial} eqTo\n */\n precess (eqFrom) {\n // (21.4) p. 134\n const [s\u03B4, c\u03B4] = base[\"default\"].sincos(eqFrom.dec);\n const [s\u03B1\u03B6, c\u03B1\u03B6] = base[\"default\"].sincos(eqFrom.ra + this.\u03B6);\n const A = c\u03B4 * s\u03B1\u03B6;\n const B = this.c\u03B8 * c\u03B4 * c\u03B1\u03B6 - this.s\u03B8 * s\u03B4;\n const C = this.s\u03B8 * c\u03B4 * c\u03B1\u03B6 + this.c\u03B8 * s\u03B4;\n const eqTo = new coord.Equatorial();\n eqTo.ra = Math.atan2(A, B) + this.z;\n if (C < base[\"default\"].CosSmallAngle) {\n eqTo.dec = Math.asin(C);\n } else {\n eqTo.dec = Math.acos(Math.hypot(A, B)); // near pole\n }\n return eqTo\n }\n}\n\n/**\n * Position precesses equatorial coordinates from one epoch to another,\n * including proper motions.\n *\n * If proper motions are not to be considered or are not applicable, pass 0, 0\n * for m\u03B1, m\u03B4\n *\n * Both eqFrom and eqTo must be non-nil, although they may point to the same\n * struct. EqTo is returned for convenience.\n * @param {Equatorial} eqFrom\n * @param {Number} epochFrom\n * @param {Number} epochTo\n * @param {Number} m\u03B1 - in radians\n * @param {Number} m\u03B4 - in radians\n * @returns {Equatorial} [eqTo]\n */\nfunction position (eqFrom, epochFrom, epochTo, m\u03B1, m\u03B4) {\n const p = new Precessor(epochFrom, epochTo);\n const t = epochTo - epochFrom;\n const eqTo = new coord.Equatorial();\n eqTo.ra = eqFrom.ra + m\u03B1 * t;\n eqTo.dec = eqFrom.dec + m\u03B4 * t;\n return p.precess(eqTo)\n}\n\n// coefficients from (21.5) p. 136\nconst \u03B7T = [47.0029 * s, -0.06603 * s, 0.000598 * s];\nconst \u03C0T = [174.876384 * d, 3289.4789 * s, 0.60622 * s];\nconst pT = [5029.0966 * s, 2.22226 * s, -0.000042 * s];\nconst \u03B7t = [47.0029 * s, -0.03302 * s, 0.000060 * s];\nconst \u03C0t = [174.876384 * d, -869.8089 * s, 0.03536 * s];\nconst pt = [5029.0966 * s, 1.11113 * s, -0.000006 * s];\n\n/**\n * EclipticPrecessor represents precession from one epoch to another.\n *\n * Construct with NewEclipticPrecessor, then call method Precess.\n * After construction, Precess may be called multiple times to precess\n * different coordinates with the same initial and final epochs.\n */\nclass EclipticPrecessor {\n /**\n * constructs an EclipticPrecessor object and initializes\n * it to precess coordinates from epochFrom to epochTo.\n * @param {Number} epochFrom\n * @param {Number} epochTo\n */\n constructor (epochFrom, epochTo) {\n // (21.5) p. 136\n let \u03B7Coeff = \u03B7t;\n let \u03C0Coeff = \u03C0t;\n let pCoeff = pt;\n if (epochFrom !== 2000) {\n const T = (epochFrom - 2000) * 0.01;\n \u03B7Coeff = [\n base[\"default\"].horner(T, ...\u03B7T),\n -0.03302 * s + 0.000598 * s * T,\n 0.000060 * s\n ];\n \u03C0Coeff = [\n base[\"default\"].horner(T, ...\u03C0T),\n -869.8089 * s - 0.50491 * s * T,\n 0.03536 * s\n ];\n pCoeff = [\n base[\"default\"].horner(T, ...pT),\n 1.11113 * s - 0.000042 * s * T,\n -0.000006 * s\n ];\n }\n const t = (epochTo - epochFrom) * 0.01;\n this.\u03C0 = base[\"default\"].horner(t, ...\u03C0Coeff);\n this.p = base[\"default\"].horner(t, ...pCoeff) * t;\n const \u03B7 = base[\"default\"].horner(t, ...\u03B7Coeff) * t;\n this.s\u03B7 = Math.sin(\u03B7);\n this.c\u03B7 = Math.cos(\u03B7);\n }\n\n /**\n * EclipticPrecess precesses coordinates eclFrom, leaving result in eclTo.\n *\n * The same struct may be used for eclFrom and eclTo.\n * EclTo is returned for convenience.\n * @param {Ecliptic} eclFrom\n * @returns {Ecliptic} [eclTo]\n */\n precess (eclFrom) {\n // (21.7) p. 137\n const [s\u03B2, c\u03B2] = base[\"default\"].sincos(eclFrom.lat);\n const [sd, cd] = base[\"default\"].sincos(this.\u03C0 - eclFrom.lon);\n const A = this.c\u03B7 * c\u03B2 * sd - this.s\u03B7 * s\u03B2;\n const B = c\u03B2 * cd;\n const C = this.c\u03B7 * s\u03B2 + this.s\u03B7 * c\u03B2 * sd;\n const eclTo = new coord.Ecliptic(this.p + this.\u03C0 - Math.atan2(A, B));\n if (C < base[\"default\"].CosSmallAngle) {\n eclTo.lat = Math.asin(C);\n } else {\n eclTo.lat = Math.acos(Math.hypot(A, B)); // near pole\n }\n return eclTo\n }\n\n /**\n * ReduceElements reduces orbital elements of a solar system body from one\n * equinox to another.\n *\n * This function is described in chapter 24, but is located in this\n * package so it can be a method of EclipticPrecessor.\n *\n * @param {Elements} eFrom\n * @returns {Elements} eTo\n */\n reduceElements (eFrom) {\n const \u03C8 = this.\u03C0 + this.p;\n const [si, ci] = base[\"default\"].sincos(eFrom.inc);\n const [snp, cnp] = base[\"default\"].sincos(eFrom.node - this.\u03C0);\n const eTo = new elementequinox.Elements();\n // (24.1) p. 159\n eTo.inc = Math.acos(ci * this.c\u03B7 + si * this.s\u03B7 * cnp);\n // (24.2) p. 159\n eTo.node = Math.atan2(si * snp, this.c\u03B7 * si * cnp - this.s\u03B7 * ci) + \u03C8;\n // (24.3) p. 159\n eTo.peri = Math.atan2(-this.s\u03B7 * snp, si * this.c\u03B7 - ci * this.s\u03B7 * cnp) + eFrom.peri;\n return eTo\n }\n}\n\n/**\n * eclipticPosition precesses ecliptic coordinates from one epoch to another,\n * including proper motions.\n * While eclFrom is given as ecliptic coordinates, proper motions m\u03B1, m\u03B4 are\n * still expected to be equatorial. If proper motions are not to be considered\n * or are not applicable, pass 0, 0.\n * Both eclFrom and eclTo must be non-nil, although they may point to the same\n * struct. EclTo is returned for convenience.\n *\n * @param {Ecliptic} eclFrom,\n * @param {Number} epochFrom\n * @param {HourAngle} [m\u03B1]\n * @param {Angle} [m\u03B4]\n * @returns {Ecliptic} eclTo\n */\nfunction eclipticPosition (eclFrom, epochFrom, epochTo, m\u03B1, m\u03B4) {\n const p = new EclipticPrecessor(epochFrom, epochTo);\n\n if (m\u03B1 && m\u03B4 && (m\u03B1.rad() !== 0 || m\u03B4.rad() !== 0)) {\n const { lon, lat } = properMotion(m\u03B1.rad(), m\u03B4.rad(), epochFrom, eclFrom);\n const t = epochTo - epochFrom;\n eclFrom.lon += lon * t;\n eclFrom.lat += lat * t;\n }\n return p.precess(eclFrom)\n}\n\n/**\n * @param {Number} m\u03B1 - anual proper motion (ra)\n * @param {Number} m\u03B4 - anual proper motion (dec)\n * @param {Number} epoch\n * @param {Ecliptic} ecl\n * @returns {Ecliptic} {lon, lat}\n */\nfunction properMotion (m\u03B1, m\u03B4, epoch, ecl) {\n const \u03B5 = nutation[\"default\"].meanObliquity(base[\"default\"].JulianYearToJDE(epoch));\n const [\u03B5sin, \u03B5cos] = base[\"default\"].sincos(\u03B5);\n const { ra, dec } = ecl.toEquatorial(\u03B5);\n const [s\u03B1, c\u03B1] = base[\"default\"].sincos(ra);\n const [s\u03B4, c\u03B4] = base[\"default\"].sincos(dec);\n const c\u03B2 = Math.cos(ecl.lat);\n const lon = (m\u03B4 * \u03B5sin * c\u03B1 + m\u03B1 * c\u03B4 * (\u03B5cos * c\u03B4 + \u03B5sin * s\u03B4 * s\u03B1)) / (c\u03B2 * c\u03B2);\n const lat = (m\u03B4 * (\u03B5cos * c\u03B4 + \u03B5sin * s\u03B4 * s\u03B1) - m\u03B1 * \u03B5sin * c\u03B1 * c\u03B4) / c\u03B2;\n return new coord.Ecliptic(lon, lat)\n}\n\n/**\n * ProperMotion3D takes the 3D equatorial coordinates of an object\n * at one epoch and computes its coordinates at a new epoch, considering\n * proper motion and radial velocity.\n *\n * Radial distance (r) must be in parsecs, radial velocitiy (mr) in\n * parsecs per year.\n *\n * Both eqFrom and eqTo must be non-nil, although they may point to the same\n * struct. EqTo is returned for convenience.\n *\n * @param {Equatorial} eqFrom,\n * @param {Number} epochFrom\n * @param {Number} r\n * @param {Number} mr\n * @param {HourAngle} m\u03B1\n * @param {Angle} m\u03B4\n * @returns {Equatorial} eqTo\n */\nfunction properMotion3D (eqFrom, epochFrom, epochTo, r, mr, m\u03B1, m\u03B4) {\n const [s\u03B1, c\u03B1] = base[\"default\"].sincos(eqFrom.ra);\n const [s\u03B4, c\u03B4] = base[\"default\"].sincos(eqFrom.dec);\n const x = r * c\u03B4 * c\u03B1;\n const y = r * c\u03B4 * s\u03B1;\n const z = r * s\u03B4;\n const mrr = mr / r;\n const zm\u03B4 = z * m\u03B4.rad();\n const mx = x * mrr - zm\u03B4 * c\u03B1 - y * m\u03B1.rad();\n const my = y * mrr - zm\u03B4 * s\u03B1 + x * m\u03B1.rad();\n const mz = z * mrr + r * m\u03B4.rad() * c\u03B4;\n const t = epochTo - epochFrom;\n const xp = x + t * mx;\n const yp = y + t * my;\n const zp = z + t * mz;\n const eqTo = new coord.Equatorial();\n eqTo.ra = Math.atan2(yp, xp);\n eqTo.dec = Math.atan2(zp, Math.hypot(xp, yp));\n return eqTo\n}\n\nvar precess = {\n approxAnnualPrecession,\n mn,\n approxPosition,\n Precessor,\n position,\n EclipticPrecessor,\n eclipticPosition,\n properMotion,\n properMotion3D\n};\n\nexports.EclipticPrecessor = EclipticPrecessor;\nexports.Precessor = Precessor;\nexports.approxAnnualPrecession = approxAnnualPrecession;\nexports.approxPosition = approxPosition;\nexports[\"default\"] = precess;\nexports.eclipticPosition = eclipticPosition;\nexports.mn = mn;\nexports.position = position;\nexports.properMotion = properMotion;\nexports.properMotion3D = properMotion3D;\n", "'use strict';\n\nObject.defineProperty(exports, '__esModule', { value: true });\n\nvar base = require('./base.cjs');\nvar coord = require('./coord.cjs');\nvar nutation = require('./nutation.cjs');\n\n/**\n * @copyright 2013 Sonia Keys\n * @copyright 2016 commenthol\n * @license MIT\n * @module solar\n */\n\n/**\n * True returns true geometric longitude and anomaly of the sun referenced to the mean equinox of date.\n *\n * @param {Number} T - number of Julian centuries since J2000. See base.J2000Century.\n * @returns {Object}\n * {Number} lon = true geometric longitude, \u2609, in radians\n * {Number} ano = true anomaly in radians\n */\nfunction trueLongitude (T) {\n // (25.2) p. 163\n const L0 = base[\"default\"].horner(T, 280.46646, 36000.76983, 0.0003032) *\n Math.PI / 180;\n const m = meanAnomaly(T);\n const C = (base[\"default\"].horner(T, 1.914602, -0.004817, -0.000014) *\n Math.sin(m) +\n (0.019993 - 0.000101 * T) * Math.sin(2 * m) +\n 0.000289 * Math.sin(3 * m)) * Math.PI / 180;\n const lon = base[\"default\"].pmod(L0 + C, 2 * Math.PI);\n const ano = base[\"default\"].pmod(m + C, 2 * Math.PI);\n return { lon, ano }\n}\n\n/**\n * meanAnomaly returns the mean anomaly of Earth at the given T.\n *\n * @param {Number} T - number of Julian centuries since J2000. See base.J2000Century.\n * @returns {Number} Result is in radians and is not normalized to the range 0..2\u03C0.\n */\nfunction meanAnomaly (T) {\n // (25.3) p. 163\n return base[\"default\"].horner(T, 357.52911, 35999.05029, -0.0001537) * Math.PI / 180\n}\n\n/**\n * eccentricity returns eccentricity of the Earth's orbit around the sun.\n *\n * @param {Number} T - number of Julian centuries since J2000. See base.J2000Century.\n * @returns {Number} eccentricity of the Earth's orbit around the sun.\n */\nfunction eccentricity (T) {\n // (25.4) p. 163\n return base[\"default\"].horner(T, 0.016708634, -0.000042037, -0.0000001267)\n}\n\n/**\n * Radius returns the Sun-Earth distance in AU.\n *\n * @param {Number} T - number of Julian centuries since J2000. See base.J2000Century.\n * @returns {Number} Sun-Earth distance in AU\n */\nfunction radius (T) {\n const {lon, ano} = trueLongitude(T); // eslint-disable-line\n const e = eccentricity(T);\n // (25.5) p. 164\n return 1.000001018 * (1 - e * e) / (1 + e * Math.cos(ano))\n}\n\n/**\n * ApparentLongitude returns apparent longitude of the Sun referenced to the true equinox of date.\n * Result includes correction for nutation and aberration. Unit is radians.\n *\n * @param {Number} T - number of Julian centuries since J2000. See base.J2000Century.\n * @returns {Number} apparent longitude of the Sun referenced to the true equinox of date.\n */\nfunction apparentLongitude (T) {\n const \u03A9 = node(T);\n const {lon, ano} = trueLongitude(T); // eslint-disable-line\n return lon - 0.00569 * Math.PI / 180 - 0.00478 * Math.PI / 180 * Math.sin(\u03A9)\n}\n\n/**\n * @private\n */\nfunction node (T) {\n return 125.04 * Math.PI / 180 - 1934.136 * Math.PI / 180 * T\n}\n\n/**\n * true2000 returns true geometric longitude and anomaly of the sun referenced to equinox J2000.\n * Results are accurate to .01 degree for years 1900 to 2100.\n *\n * @param {Number} T - number of Julian centuries since J2000. See base.J2000Century.\n * @returns {Object}\n * {Number} lon - true geometric longitude, \u2609, in radians\n * {Number} ano - true anomaly in radians\n */\nfunction true2000 (T) {\n let { lon, ano } = trueLongitude(T);\n lon -= 0.01397 * Math.PI / 180 * T * 100;\n return { lon, ano }\n}\n\n/**\n * trueEquatorial returns the true geometric position of the Sun as equatorial coordinates.\n *\n * @param {Number} jde - Julian ephemeris day\n * @returns {Coord}\n * {Number} ra - right ascension in radians\n * {Number} dec - declination in radians\n */\nfunction trueEquatorial (jde) {\n const {lon, ano} = trueLongitude(base[\"default\"].J2000Century(jde)); // eslint-disable-line\n const \u03B5 = nutation[\"default\"].meanObliquity(jde);\n const [ss, cs] = base[\"default\"].sincos(lon);\n const [s\u03B5, c\u03B5] = base[\"default\"].sincos(\u03B5);\n // (25.6, 25.7) p. 165\n const ra = Math.atan2(c\u03B5 * ss, cs);\n const dec = s\u03B5 * ss;\n return new base[\"default\"].Coord(ra, dec)\n}\n\n/**\n * apparentEquatorial returns the apparent position of the Sun as equatorial coordinates.\n *\n * @param {Number} jde - Julian ephemeris day\n * @returns {Coord}\n * {Number} ra - right ascension in radians\n * {Number} dec - declination in radians\n */\nfunction apparentEquatorial (jde) {\n const T = base[\"default\"].J2000Century(jde);\n const \u03BB = apparentLongitude(T);\n const \u03B5 = nutation[\"default\"].meanObliquity(jde);\n const [s\u03BB, c\u03BB] = base[\"default\"].sincos(\u03BB);\n // (25.8) p. 165\n const [s\u03B5, c\u03B5] = base[\"default\"].sincos(\u03B5 + 0.00256 * Math.PI / 180 * Math.cos(node(T)));\n const ra = Math.atan2(c\u03B5 * s\u03BB, c\u03BB);\n const dec = Math.asin(s\u03B5 * s\u03BB);\n return new base[\"default\"].Coord(ra, dec)\n}\n\n/**\n * trueVSOP87 returns the true geometric position of the sun as ecliptic coordinates.\n *\n * Result computed by full VSOP87 theory. Result is at equator and equinox\n * of date in the FK5 frame. It does not include nutation or aberration.\n *\n * @param {Planet} planet\n * @param {Number} jde - Julian ephemeris day\n * @returns {Object}\n * {Number} lon - ecliptic longitude in radians\n * {Number} lat - ecliptic latitude in radians\n * {Number} range - range in AU\n */\nfunction trueVSOP87 (planet, jde) {\n let { lon, lat, range } = planet.position(jde);\n const s = lon + Math.PI;\n // FK5 correction.\n const \u03BBp = base[\"default\"].horner(base[\"default\"].J2000Century(jde),\n s, -1.397 * Math.PI / 180, -0.00031 * Math.PI / 180);\n const [s\u03BBp, c\u03BBp] = base[\"default\"].sincos(\u03BBp);\n const \u0394\u03B2 = 0.03916 / 3600 * Math.PI / 180 * (c\u03BBp - s\u03BBp);\n // (25.9) p. 166\n lon = base[\"default\"].pmod(s - 0.09033 / 3600 * Math.PI / 180, 2 * Math.PI);\n lat = \u0394\u03B2 - lat;\n return new base[\"default\"].Coord(lon, lat, range)\n}\n\n/**\n * apparentVSOP87 returns the apparent position of the sun as ecliptic coordinates.\n *\n * Result computed by VSOP87, at equator and equinox of date in the FK5 frame,\n * and includes effects of nutation and aberration.\n *\n * @param {Planet} planet\n * @param {Number} jde - Julian ephemeris day\n * @returns {Coord}\n * {Number} lon - ecliptic longitude in radians\n * {Number} lat - ecliptic latitude in radians\n * {Number} range - range in AU\n */\nfunction apparentVSOP87 (planet, jde) {\n // note: see duplicated code in ApparentEquatorialVSOP87.\n let { lon, lat, range } = trueVSOP87(planet, jde);\n const \u0394\u03C8 = nutation[\"default\"].nutation(jde)[0];\n const a = aberration(range);\n lon = lon + \u0394\u03C8 + a;\n return new base[\"default\"].Coord(lon, lat, range)\n}\n\n/**\n * apparentEquatorialVSOP87 returns the apparent position of the sun as equatorial coordinates.\n *\n * Result computed by VSOP87, at equator and equinox of date in the FK5 frame,\n * and includes effects of nutation and aberration.\n *\n * @param {Planet} planet\n * @param {Number} jde - Julian ephemeris day\n * @returns {Coord}\n * {Number} ra - right ascension in radians\n * {Number} dec - declination in radians\n * {Number} range - range in AU\n */\nfunction apparentEquatorialVSOP87 (planet, jde) {\n // note: duplicate code from ApparentVSOP87 so we can keep \u0394\u03B5.\n // see also duplicate code in time.E().\n const { lon, lat, range } = trueVSOP87(planet, jde);\n const [\u0394\u03C8, \u0394\u03B5] = nutation[\"default\"].nutation(jde);\n const a = aberration(range);\n const \u03BB = lon + \u0394\u03C8 + a;\n const \u03B5 = nutation[\"default\"].meanObliquity(jde) + \u0394\u03B5;\n const { ra, dec } = new coord[\"default\"].Ecliptic(\u03BB, lat).toEquatorial(\u03B5);\n return new base.Coord(ra, dec, range)\n}\n\n/**\n * Low precision formula. The high precision formula is not implemented\n * because the low precision formula already gives position results to the\n * accuracy given on p. 165. The high precision formula represents lots\n * of typing with associated chance of typos, and no way to test the result.\n * @param {Number} range\n * @returns {Number} aberation\n */\nfunction aberration (range) {\n // (25.10) p. 167\n return -20.4898 / 3600 * Math.PI / 180 / range\n}\n\nvar solar = {\n trueLongitude,\n true: trueLongitude, // BACKWARDS-COMPATIBILITY\n meanAnomaly,\n eccentricity,\n radius,\n apparentLongitude,\n true2000,\n trueEquatorial,\n apparentEquatorial,\n trueVSOP87,\n apparentVSOP87,\n apparentEquatorialVSOP87,\n aberration\n};\n\nexports.aberration = aberration;\nexports.apparentEquatorial = apparentEquatorial;\nexports.apparentEquatorialVSOP87 = apparentEquatorialVSOP87;\nexports.apparentLongitude = apparentLongitude;\nexports.apparentVSOP87 = apparentVSOP87;\nexports[\"default\"] = solar;\nexports.eccentricity = eccentricity;\nexports.meanAnomaly = meanAnomaly;\nexports.radius = radius;\nexports.true2000 = true2000;\nexports.trueEquatorial = trueEquatorial;\nexports.trueLongitude = trueLongitude;\nexports.trueVSOP87 = trueVSOP87;\n", "'use strict';\n\nObject.defineProperty(exports, '__esModule', { value: true });\n\nvar base = require('./base.cjs');\nvar coord = require('./coord.cjs');\nvar nutation$1 = require('./nutation.cjs');\nvar precess = require('./precess.cjs');\nvar solar = require('./solar.cjs');\n\n/**\n * @copyright 2013 Sonia Keys\n * @copyright 2016 commenthol\n * @license MIT\n * @module apparent\n */\nconst { cos, tan } = Math;\n\n/**\n * Nutation returns corrections due to nutation for equatorial coordinates\n * of an object.\n *\n * Results are invalid for objects very near the celestial poles.\n * @param {Number} \u03B1 - right ascension\n * @param {Number} \u03B4 - declination\n * @param {Number} jd - Julian Day\n * @return {Number[]} [\u0394\u03B11, \u0394\u03B41] -\n*/\nfunction nutation (\u03B1, \u03B4, jd) { // (\u03B1, \u03B4, jd float64) (\u0394\u03B11, \u0394\u03B41 float64)\n const \u03B5 = nutation$1[\"default\"].meanObliquity(jd);\n const [sin\u03B5, cos\u03B5] = base[\"default\"].sincos(\u03B5);\n const [\u0394\u03C8, \u0394\u03B5] = nutation$1[\"default\"].nutation(jd);\n const [sin\u03B1, cos\u03B1] = base[\"default\"].sincos(\u03B1);\n const tan\u03B4 = tan(\u03B4);\n // (23.1) p. 151\n const \u0394\u03B11 = (cos\u03B5 + sin\u03B5 * sin\u03B1 * tan\u03B4) * \u0394\u03C8 - cos\u03B1 * tan\u03B4 * \u0394\u03B5;\n const \u0394\u03B41 = sin\u03B5 * cos\u03B1 * \u0394\u03C8 + sin\u03B1 * \u0394\u03B5;\n return [\u0394\u03B11, \u0394\u03B41]\n}\n\n/**\n * \u03BA is the constant of aberration in radians.\n */\nconst \u03BA = 20.49552 * Math.PI / 180 / 3600;\n\n/**\n * longitude of perihelian of Earth's orbit.\n */\nfunction perihelion (T) { // (T float64) float64\n return base[\"default\"].horner(T, 102.93735, 1.71946, 0.00046) * Math.PI / 180\n}\n\n/**\n * EclipticAberration returns corrections due to aberration for ecliptic\n * coordinates of an object.\n */\nfunction eclipticAberration (\u03BB, \u03B2, jd) { // (\u03BB, \u03B2, jd float64) (\u0394\u03BB, \u0394\u03B2 float64)\n const T = base[\"default\"].J2000Century(jd);\n const { lon, ano } = solar[\"default\"].trueLongitude(T); // eslint-disable-line no-unused-vars\n const e = solar[\"default\"].eccentricity(T);\n const \u03C0 = perihelion(T);\n const [s\u03B2, c\u03B2] = base[\"default\"].sincos(\u03B2);\n const [ss\u03BB, cs\u03BB] = base[\"default\"].sincos(lon - \u03BB);\n const [sin\u03C0\u03BB, cos\u03C0\u03BB] = base[\"default\"].sincos(\u03C0 - \u03BB);\n // (23.2) p. 151\n const \u0394\u03BB = \u03BA * (e * cos\u03C0\u03BB - cs\u03BB) / c\u03B2;\n const \u0394\u03B2 = -\u03BA * s\u03B2 * (ss\u03BB - e * sin\u03C0\u03BB);\n return [\u0394\u03BB, \u0394\u03B2]\n}\n\n/**\n * Aberration returns corrections due to aberration for equatorial\n * coordinates of an object.\n */\nfunction aberration (\u03B1, \u03B4, jd) { // (\u03B1, \u03B4, jd float64) (\u0394\u03B12, \u0394\u03B42 float64)\n const \u03B5 = nutation$1[\"default\"].meanObliquity(jd);\n const T = base[\"default\"].J2000Century(jd);\n const { lon, ano } = solar[\"default\"].trueLongitude(T); // eslint-disable-line no-unused-vars\n const e = solar[\"default\"].eccentricity(T);\n const \u03C0 = perihelion(T);\n const [sin\u03B1, cos\u03B1] = base[\"default\"].sincos(\u03B1);\n const [sin\u03B4, cos\u03B4] = base[\"default\"].sincos(\u03B4);\n const [sins, coss] = base[\"default\"].sincos(lon);\n const [sin\u03C0, cos\u03C0] = base[\"default\"].sincos(\u03C0);\n const cos\u03B5 = cos(\u03B5);\n const q1 = cos\u03B1 * cos\u03B5;\n // (23.3) p. 152\n const \u0394\u03B12 = \u03BA * (e * (q1 * cos\u03C0 + sin\u03B1 * sin\u03C0) - (q1 * coss + sin\u03B1 * sins)) / cos\u03B4;\n const q2 = cos\u03B5 * (tan(\u03B5) * cos\u03B4 - sin\u03B1 * sin\u03B4);\n const q3 = cos\u03B1 * sin\u03B4;\n const \u0394\u03B42 = \u03BA * (e * (cos\u03C0 * q2 + sin\u03C0 * q3) - (coss * q2 + sins * q3));\n return [\u0394\u03B12, \u0394\u03B42]\n}\n\n/**\n * Position computes the apparent position of an object.\n *\n * Position is computed for equatorial coordinates in eqFrom, considering\n * proper motion, precession, nutation, and aberration. Result is in\n * eqTo. EqFrom and eqTo must be non-nil, but may point to the same struct.\n */\nfunction position (eqFrom, epochFrom, epochTo, m\u03B1, m\u03B4) { // (eqFrom, eqTo *coord.Equatorial, epochFrom, epochTo float64, m\u03B1 sexa.HourAngle, m\u03B4 sexa.Angle) *coord.Equatorial\n const eqTo = precess[\"default\"].position(eqFrom, epochFrom, epochTo, m\u03B1, m\u03B4);\n const jd = base[\"default\"].JulianYearToJDE(epochTo);\n const [\u0394\u03B11, \u0394\u03B41] = nutation(eqTo.ra, eqTo.dec, jd);\n const [\u0394\u03B12, \u0394\u03B42] = aberration(eqTo.ra, eqTo.dec, jd);\n eqTo.ra += \u0394\u03B11 + \u0394\u03B12;\n eqTo.dec += \u0394\u03B41 + \u0394\u03B42;\n return eqTo\n}\n\n/**\n * AberrationRonVondrak uses the Ron-Vondr\u00E1k expression to compute corrections\n * due to aberration for equatorial coordinates of an object.\n */\nfunction aberrationRonVondrak (\u03B1, \u03B4, jd) { // (\u03B1, \u03B4, jd float64) (\u0394\u03B1, \u0394\u03B4 float64)\n const T = base[\"default\"].J2000Century(jd);\n const r = {\n T,\n L2: 3.1761467 + 1021.3285546 * T,\n L3: 1.7534703 + 628.3075849 * T,\n L4: 6.2034809 + 334.0612431 * T,\n L5: 0.5995465 + 52.9690965 * T,\n L6: 0.8740168 + 21.3299095 * T,\n L7: 5.4812939 + 7.4781599 * T,\n L8: 5.3118863 + 3.8133036 * T,\n Lp: 3.8103444 + 8399.6847337 * T,\n D: 5.1984667 + 7771.3771486 * T,\n Mp: 2.3555559 + 8328.6914289 * T,\n F: 1.6279052 + 8433.4661601 * T\n };\n let Xp = 0;\n let Yp = 0;\n let Zp = 0;\n // sum smaller terms first\n for (let i = 35; i >= 0; i--) {\n const [x, y, z] = rvTerm[i](r);\n Xp += x;\n Yp += y;\n Zp += z;\n }\n const [sin\u03B1, cos\u03B1] = base[\"default\"].sincos(\u03B1);\n const [sin\u03B4, cos\u03B4] = base[\"default\"].sincos(\u03B4);\n // (23.4) p. 156\n return [(Yp * cos\u03B1 - Xp * sin\u03B1) / (c * cos\u03B4), -((Xp * cos\u03B1 + Yp * sin\u03B1) * sin\u03B4 - Zp * cos\u03B4) / c]\n}\n\nconst c = 17314463350; // unit is 1e-8 AU / day\n\n// r = {T, L2, L3, L4, L5, L6, L7, L8, Lp, D, Mp, F}\nconst rvTerm = [\n function (r) { // 1\n const [sinA, cosA] = base[\"default\"].sincos(r.L3);\n return [(-1719914 - 2 * r.T) * sinA - 25 * cosA,\n (25 - 13 * r.T) * sinA + (1578089 + 156 * r.T) * cosA,\n (10 + 32 * r.T) * sinA + (684185 - 358 * r.T) * cosA\n ]\n },\n function (r) { // 2\n const [sinA, cosA] = base[\"default\"].sincos(2 * r.L3);\n return [(6434 + 141 * r.T) * sinA + (28007 - 107 * r.T) * cosA,\n (25697 - 95 * r.T) * sinA + (-5904 - 130 * r.T) * cosA,\n (11141 - 48 * r.T) * sinA + (-2559 - 55 * r.T) * cosA\n ]\n },\n function (r) { // 3\n const [sinA, cosA] = base[\"default\"].sincos(r.L5);\n return [715 * sinA, 6 * sinA - 657 * cosA, -15 * sinA - 282 * cosA]\n },\n function (r) { // 4\n const [sinA, cosA] = base[\"default\"].sincos(r.Lp);\n return [715 * sinA, -656 * cosA, -285 * cosA]\n },\n function (r) { // 5\n const [sinA, cosA] = base[\"default\"].sincos(3 * r.L3);\n return [(486 - 5 * r.T) * sinA + (-236 - 4 * r.T) * cosA,\n (-216 - 4 * r.T) * sinA + (-446 + 5 * r.T) * cosA, -94 * sinA - 193 * cosA\n ]\n },\n function (r) { // 6\n const [sinA, cosA] = base[\"default\"].sincos(r.L6);\n return [159 * sinA, 2 * sinA - 147 * cosA, -6 * sinA - 61 * cosA]\n },\n function (r) { // 7\n const cosA = Math.cos(r.F);\n return [0, 26 * cosA, -59 * cosA]\n },\n function (r) { // 8\n const [sinA, cosA] = base[\"default\"].sincos(r.Lp + r.Mp);\n return [39 * sinA, -36 * cosA, -16 * cosA]\n },\n function (r) { // 9\n const [sinA, cosA] = base[\"default\"].sincos(2 * r.L5);\n return [33 * sinA - 10 * cosA, -9 * sinA - 30 * cosA, -5 * sinA - 13 * cosA]\n },\n function (r) { // 10\n const [sinA, cosA] = base[\"default\"].sincos(2 * r.L3 - r.L5);\n return [31 * sinA + cosA, sinA - 28 * cosA, -12 * cosA]\n },\n function (r) { // 11\n const [sinA, cosA] = base[\"default\"].sincos(3 * r.L3 - 8 * r.L4 + 3 * r.L5);\n return [8 * sinA - 28 * cosA, 25 * sinA + 8 * cosA, 11 * sinA + 3 * cosA]\n },\n function (r) { // 12\n const [sinA, cosA] = base[\"default\"].sincos(5 * r.L3 - 8 * r.L4 + 3 * r.L5);\n return [8 * sinA - 28 * cosA, -25 * sinA - 8 * cosA, -11 * sinA + -3 * cosA]\n },\n function (r) { // 13\n const [sinA, cosA] = base[\"default\"].sincos(2 * r.L2 - r.L3);\n return [21 * sinA, -19 * cosA, -8 * cosA]\n },\n function (r) { // 14\n const [sinA, cosA] = base[\"default\"].sincos(r.L2);\n return [-19 * sinA, 17 * cosA, 8 * cosA]\n },\n function (r) { // 15\n const [sinA, cosA] = base[\"default\"].sincos(r.L7);\n return [17 * sinA, -16 * cosA, -7 * cosA]\n },\n function (r) { // 16\n const [sinA, cosA] = base[\"default\"].sincos(r.L3 - 2 * r.L5);\n return [16 * sinA, 15 * cosA, sinA + 7 * cosA]\n },\n function (r) { // 17\n const [sinA, cosA] = base[\"default\"].sincos(r.L8);\n return [16 * sinA, sinA - 15 * cosA, -3 * sinA - 6 * cosA]\n },\n function (r) { // 18\n const [sinA, cosA] = base[\"default\"].sincos(r.L3 + r.L5);\n return [11 * sinA - cosA, -sinA - 10 * cosA, -sinA - 5 * cosA]\n },\n function (r) { // 19\n const [sinA, cosA] = base[\"default\"].sincos(2 * r.L2 - 2 * r.L3);\n return [-11 * cosA, -10 * sinA, -4 * sinA]\n },\n function (r) { // 20\n const [sinA, cosA] = base[\"default\"].sincos(r.L3 - r.L5);\n return [-11 * sinA - 2 * cosA, -2 * sinA + 9 * cosA, -sinA + 4 * cosA]\n },\n function (r) { // 21\n const [sinA, cosA] = base[\"default\"].sincos(4 * r.L3);\n return [-7 * sinA - 8 * cosA, -8 * sinA + 6 * cosA, -3 * sinA + 3 * cosA]\n },\n function (r) { // 22\n const [sinA, cosA] = base[\"default\"].sincos(3 * r.L3 - 2 * r.L5);\n return [-10 * sinA, 9 * cosA, 4 * cosA]\n },\n function (r) { // 23\n const [sinA, cosA] = base[\"default\"].sincos(r.L2 - 2 * r.L3);\n return [-9 * sinA, -9 * cosA, -4 * cosA]\n },\n function (r) { // 24\n const [sinA, cosA] = base[\"default\"].sincos(2 * r.L2 - 3 * r.L3);\n return [-9 * sinA, -8 * cosA, -4 * cosA]\n },\n function (r) { // 25\n const [sinA, cosA] = base[\"default\"].sincos(2 * r.L6);\n return [-9 * cosA, -8 * sinA, -3 * sinA]\n },\n function (r) { // 26\n const [sinA, cosA] = base[\"default\"].sincos(2 * r.L2 - 4 * r.L3);\n return [-9 * cosA, 8 * sinA, 3 * sinA]\n },\n function (r) { // 27\n const [sinA, cosA] = base[\"default\"].sincos(3 * r.L3 - 2 * r.L4);\n return [8 * sinA, -8 * cosA, -3 * cosA]\n },\n function (r) { // 28\n const [sinA, cosA] = base[\"default\"].sincos(r.Lp + 2 * r.D - r.Mp);\n return [8 * sinA, -7 * cosA, -3 * cosA]\n },\n function (r) { // 29\n const [sinA, cosA] = base[\"default\"].sincos(8 * r.L2 - 12 * r.L3);\n return [-4 * sinA - 7 * cosA, -6 * sinA + 4 * cosA, -3 * sinA + 2 * cosA]\n },\n function (r) { // 30\n const [sinA, cosA] = base[\"default\"].sincos(8 * r.L2 - 14 * r.L3);\n return [-4 * sinA - 7 * cosA, 6 * sinA - 4 * cosA, 3 * sinA - 2 * cosA]\n },\n function (r) { // 31\n const [sinA, cosA] = base[\"default\"].sincos(2 * r.L4);\n return [-6 * sinA - 5 * cosA, -4 * sinA + 5 * cosA, -2 * sinA + 2 * cosA]\n },\n function (r) { // 32\n const [sinA, cosA] = base[\"default\"].sincos(3 * r.L2 - 4 * r.L3);\n return [-sinA - cosA, -2 * sinA - 7 * cosA, sinA - 4 * cosA]\n },\n function (r) { // 33\n const [sinA, cosA] = base[\"default\"].sincos(2 * r.L3 - 2 * r.L5);\n return [4 * sinA - 6 * cosA, -5 * sinA - 4 * cosA, -2 * sinA - 2 * cosA]\n },\n function (r) { // 34\n const [sinA, cosA] = base[\"default\"].sincos(3 * r.L2 - 3 * r.L3);\n return [-7 * cosA, -6 * sinA, -3 * sinA]\n },\n function (r) { // 35\n const [sinA, cosA] = base[\"default\"].sincos(2 * r.L3 - 2 * r.L4);\n return [5 * sinA - 5 * cosA, -4 * sinA - 5 * cosA, -2 * sinA - 2 * cosA]\n },\n function (r) { // 36\n const [sinA, cosA] = base[\"default\"].sincos(r.Lp - 2 * r.D);\n return [5 * sinA, -5 * cosA, -2 * cosA]\n }\n];\n\n/**\n * PositionRonVondrak computes the apparent position of an object using\n * the Ron-Vondr\u00E1k expression for aberration.\n *\n * Position is computed for equatorial coordinates in eqFrom, considering\n * proper motion, aberration, precession, and _nutation. Result is in\n * eqTo. EqFrom and eqTo must be non-nil, but may point to the same struct.\n *\n * Note the Ron-Vondr\u00E1k expression is only valid for the epoch J2000.\n * EqFrom must be coordinates at epoch J2000.\n */\nfunction positionRonVondrak (eqFrom, epochTo, m\u03B1, m\u03B4) { // (eqFrom, eqTo *coord.Equatorial, epochTo float64, m\u03B1 sexa.HourAngle, m\u03B4 sexa.Angle) *coord.Equatorial\n const t = epochTo - 2000;\n let eqTo = new coord[\"default\"].Equatorial();\n eqTo.ra = eqFrom.ra + m\u03B1.rad() * t;\n eqTo.dec = eqFrom.dec + m\u03B4.rad() * t;\n const jd = base[\"default\"].JulianYearToJDE(epochTo);\n const [\u0394\u03B1, \u0394\u03B4] = aberrationRonVondrak(eqTo.ra, eqTo.dec, jd);\n eqTo.ra += \u0394\u03B1;\n eqTo.dec += \u0394\u03B4;\n eqTo = precess[\"default\"].position(eqTo, 2000, epochTo, 0, 0);\n const [\u0394\u03B11, \u0394\u03B41] = nutation(eqTo.ra, eqTo.dec, jd);\n eqTo.ra += \u0394\u03B11;\n eqTo.dec += \u0394\u03B41;\n return eqTo\n}\n\nvar apparent = {\n nutation,\n perihelion,\n eclipticAberration,\n aberration,\n position,\n aberrationRonVondrak,\n positionRonVondrak\n};\n\nexports.aberration = aberration;\nexports.aberrationRonVondrak = aberrationRonVondrak;\nexports[\"default\"] = apparent;\nexports.eclipticAberration = eclipticAberration;\nexports.nutation = nutation;\nexports.perihelion = perihelion;\nexports.position = position;\nexports.positionRonVondrak = positionRonVondrak;\n", "'use strict';\n\nObject.defineProperty(exports, '__esModule', { value: true });\n\nvar base = require('./base.cjs');\n\n/**\n * @copyright 2013 Sonia Keys\n * @copyright 2016 commenthol\n * @license MIT\n * @module apsis\n */\nconst { sin, cos } = Math;\n\n/**\n * conversion factor from k to T, given in (50.3) p. 356\n */\nconst ck = 1 / 1325.55;\nconst D2R = Math.PI / 180;\n\n// from http://nssdc.gsfc.nasa.gov/planetary/factsheet/earthfact.html\nconst EARTH_RADIUS = 6378.137; // km\n// from http://nssdc.gsfc.nasa.gov/planetary/factsheet/moonfact.html\nconst MOON_RADIUS = 1738.1; // km\n\n/**\n * mean time of perigee or apogee\n * (50.1) p. 355\n */\nconst mean = function (T) {\n return base[\"default\"].horner(T, 2451534.6698, 27.55454989 / ck,\n -0.0006691, -0.000001098, 0.0000000052)\n};\n\n/**\n * snap returns k at half h nearest year y.\n */\nconst snap = function (y, h) {\n const k = (y - 1999.97) * 13.2555; // (50.2) p. 355\n return Math.floor(k - h + 0.5) + h\n};\n\n/**\n * meanPerigee returns the jde of the mean perigee of the Moon nearest the given date.\n *\n * @param {Number} year - is a decimal year specifying a date.\n * @return {Number} jde - Julian ephemeris day\n */\nfunction meanPerigee (year) {\n return mean(snap(year, 0) * ck)\n}\n\n/**\n * perigee returns the jde of perigee of the Moon nearest the given date.\n *\n * @param {Number} year - is a decimal year specifying a date.\n * @return {Number} jde - Julian ephemeris day\n */\nfunction perigee (year) {\n const l = new La(year, 0);\n return mean(l.T) + l.perigeeCorr()\n}\n\n/**\n * meanApogee returns the jde of the mean apogee of the Moon nearest the given date.\n *\n * @param {Number} year - is a decimal year specifying a date.\n * @return {Number} jde - Julian ephemeris day\n */\nfunction meanApogee (year) { // (year float64) float64\n return mean(snap(year, 0.5) * ck)\n}\n\n/**\n * apogee returns the jde of apogee of the Moon nearest the given date.\n *\n * @param {Number} year - is a decimal year specifying a date.\n * @return {Number} jde - Julian ephemeris day\n */\nfunction apogee (year) {\n const l = new La(year, 0.5);\n return mean(l.T) + l.apogeeCorr()\n}\n\n/**\n * apogeeParallax returns equatorial horizontal parallax of the Moon at the Apogee nearest the given date.\n *\n * @param {Number} year - is a decimal year specifying a date.\n * @return {Number} equatorial horizontal parallax in radians\n */\nfunction apogeeParallax (year) {\n return new La(year, 0.5).apogeeParallax()\n}\n\n/**\n * perigeeParallax returns equatorial horizontal parallax of the Moon at the Apogee nearest the given date.\n *\n * @param {Number} year - is a decimal year specifying a date.\n * @return {Number} equatorial horizontal parallax in radians\n */\nfunction perigeeParallax (year) {\n return new La(year, 0).perigeeParallax()\n}\n\n/**\n * Calculate the distance earth - moon (center to center) using the parallax angle in radians\n *\n * @param {Number} parallax - parallax angle in radians\n * @return {Number} distance in `km`\n */\nfunction distance (parallax) {\n return EARTH_RADIUS / sin(parallax)\n}\n\nclass La {\n constructor (y, h) {\n this.k = snap(y, h);\n this.T = this.k * ck; // (50.3) p. 350\n this.D = base[\"default\"].horner(this.T, 171.9179 * D2R, 335.9106046 * D2R / ck,\n -0.0100383 * D2R, -0.00001156 * D2R, 0.000000055 * D2R);\n this.M = base[\"default\"].horner(this.T, 347.3477 * D2R, 27.1577721 * D2R / ck,\n -0.000813 * D2R, -0.000001 * D2R);\n this.F = base[\"default\"].horner(this.T, 316.6109 * D2R, 364.5287911 * D2R / ck,\n -0.0125053 * D2R, -0.0000148 * D2R);\n return this\n }\n\n /**\n * perigee correction\n */\n perigeeCorr () {\n const l = this;\n return -1.6769 * sin(2 * l.D) +\n 0.4589 * sin(4 * l.D) +\n -0.1856 * sin(6 * l.D) +\n 0.0883 * sin(8 * l.D) +\n (-0.0773 + 0.00019 * l.T) * sin(2 * l.D - l.M) +\n (0.0502 - 0.00013 * l.T) * sin(l.M) +\n -0.046 * sin(10 * l.D) +\n (0.0422 - 0.00011 * l.T) * sin(4 * l.D - l.M) +\n -0.0256 * sin(6 * l.D - l.M) +\n 0.0253 * sin(12 * l.D) +\n 0.0237 * sin(l.D) +\n 0.0162 * sin(8 * l.D - l.M) +\n -0.0145 * sin(14 * l.D) +\n 0.0129 * sin(2 * l.F) +\n -0.0112 * sin(3 * l.D) +\n -0.0104 * sin(10 * l.D - l.M) +\n 0.0086 * sin(16 * l.D) +\n 0.0069 * sin(12 * l.D - l.M) +\n 0.0066 * sin(5 * l.D) +\n -0.0053 * sin(2 * (l.D + l.F)) +\n -0.0052 * sin(18 * l.D) +\n -0.0046 * sin(14 * l.D - l.M) +\n -0.0041 * sin(7 * l.D) +\n 0.004 * sin(2 * l.D + l.M) +\n 0.0032 * sin(20 * l.D) +\n -0.0032 * sin(l.D + l.M) +\n 0.0031 * sin(16 * l.D - l.M) +\n -0.0029 * sin(4 * l.D + l.M) +\n 0.0027 * sin(9 * l.D) +\n 0.0027 * sin(4 * l.D + 2 * l.F) +\n -0.0027 * sin(2 * (l.D - l.M)) +\n 0.0024 * sin(4 * l.D - 2 * l.M) +\n -0.0021 * sin(6 * l.D - 2 * l.M) +\n -0.0021 * sin(22 * l.D) +\n -0.0021 * sin(18 * l.D - l.M) +\n 0.0019 * sin(6 * l.D + l.M) +\n -0.0018 * sin(11 * l.D) +\n -0.0014 * sin(8 * l.D + l.M) +\n -0.0014 * sin(4 * l.D - 2 * l.F) +\n -0.0014 * sin(6 * l.D + 2 * l.F) +\n 0.0014 * sin(3 * l.D + l.M) +\n -0.0014 * sin(5 * l.D + l.M) +\n 0.0013 * sin(13 * l.D) +\n 0.0013 * sin(20 * l.D - l.M) +\n 0.0011 * sin(3 * l.D + 2 * l.M) +\n -0.0011 * sin(2 * (2 * l.D + l.F - l.M)) +\n -0.001 * sin(l.D + 2 * l.M) +\n -0.0009 * sin(22 * l.D - l.M) +\n -0.0008 * sin(4 * l.F) +\n 0.0008 * sin(6 * l.D - 2 * l.F) +\n 0.0008 * sin(2 * (l.D - l.F) + l.M) +\n 0.0007 * sin(2 * l.M) +\n 0.0007 * sin(2 * l.F - l.M) +\n 0.0007 * sin(2 * l.D + 4 * l.F) +\n -0.0006 * sin(2 * (l.F - l.M)) +\n -0.0006 * sin(2 * (l.D - l.F + l.M)) +\n 0.0006 * sin(24 * l.D) +\n 0.0005 * sin(4 * (l.D - l.F)) +\n 0.0005 * sin(2 * (l.D + l.M)) +\n -0.0004 * sin(l.D - l.M)\n }\n\n /**\n * apogee correction\n */\n apogeeCorr () {\n const l = this;\n return 0.4392 * sin(2 * l.D) +\n 0.0684 * sin(4 * l.D) +\n (0.0456 - 0.00011 * l.T) * sin(l.M) +\n (0.0426 - 0.00011 * l.T) * sin(2 * l.D - l.M) +\n 0.0212 * sin(2 * l.F) +\n -0.0189 * sin(l.D) +\n 0.0144 * sin(6 * l.D) +\n 0.0113 * sin(4 * l.D - l.M) +\n 0.0047 * sin(2 * (l.D + l.F)) +\n 0.0036 * sin(l.D + l.M) +\n 0.0035 * sin(8 * l.D) +\n 0.0034 * sin(6 * l.D - l.M) +\n -0.0034 * sin(2 * (l.D - l.F)) +\n 0.0022 * sin(2 * (l.D - l.M)) +\n -0.0017 * sin(3 * l.D) +\n 0.0013 * sin(4 * l.D + 2 * l.F) +\n 0.0011 * sin(8 * l.D - l.M) +\n 0.001 * sin(4 * l.D - 2 * l.M) +\n 0.0009 * sin(10 * l.D) +\n 0.0007 * sin(3 * l.D + l.M) +\n 0.0006 * sin(2 * l.M) +\n 0.0005 * sin(2 * l.D + l.M) +\n 0.0005 * sin(2 * (l.D + l.M)) +\n 0.0004 * sin(6 * l.D + 2 * l.F) +\n 0.0004 * sin(6 * l.D - 2 * l.M) +\n 0.0004 * sin(10 * l.D - l.M) +\n -0.0004 * sin(5 * l.D) +\n -0.0004 * sin(4 * l.D - 2 * l.F) +\n 0.0003 * sin(2 * l.F + l.M) +\n 0.0003 * sin(12 * l.D) +\n 0.0003 * sin(2 * l.D + 2 * l.F - l.M) +\n -0.0003 * sin(l.D - l.M)\n }\n\n /**\n * apogee parallax\n */\n apogeeParallax () {\n const s = Math.PI / 180 / 3600;\n const l = this;\n return 3245.251 * s +\n -9.147 * s * cos(2 * l.D) +\n -0.841 * s * cos(l.D) +\n 0.697 * s * cos(2 * l.F) +\n (-0.656 * s + 0.0016 * s * l.T) * cos(l.M) +\n 0.355 * s * cos(4 * l.D) +\n 0.159 * s * cos(2 * l.D - l.M) +\n 0.127 * s * cos(l.D + l.M) +\n 0.065 * s * cos(4 * l.D - l.M) +\n 0.052 * s * cos(6 * l.D) +\n 0.043 * s * cos(2 * l.D + l.M) +\n 0.031 * s * cos(2 * (l.D + l.F)) +\n -0.023 * s * cos(2 * (l.D - l.F)) +\n 0.022 * s * cos(2 * (l.D - l.M)) +\n 0.019 * s * cos(2 * (l.D + l.M)) +\n -0.016 * s * cos(2 * l.M) +\n 0.014 * s * cos(6 * l.D - l.M) +\n 0.01 * s * cos(8 * l.D)\n }\n\n /**\n * perigee parallax\n */\n perigeeParallax () {\n const s = Math.PI / 180 / 3600;\n const l = this;\n return 3629.215 * s +\n 63.224 * s * cos(2 * l.D) +\n -6.990 * s * cos(4 * l.D) +\n (2.834 * s - 0.0071 * l.T * s) * cos(2 * l.D - l.M) +\n 1.927 * s * cos(6 * l.D) +\n -1.263 * s * cos(l.D) +\n -0.702 * s * cos(8 * l.D) +\n (0.696 * s - 0.0017 * l.T * s) * cos(l.M) +\n -0.690 * s * cos(2 * l.F) +\n (-0.629 * s + 0.0016 * l.T * s) * cos(4 * l.D - l.M) +\n -0.392 * s * cos(2 * (l.D - l.F)) +\n 0.297 * s * cos(10 * l.D) +\n 0.260 * s * cos(6 * l.D - l.M) +\n 0.201 * s * cos(3 * l.D) +\n -0.161 * s * cos(2 * l.D + l.M) +\n 0.157 * s * cos(l.D + l.M) +\n -0.138 * s * cos(12 * l.D) +\n -0.127 * s * cos(8 * l.D - l.M) +\n 0.104 * s * cos(2 * (l.D + l.F)) +\n 0.104 * s * cos(2 * (l.D - l.M)) +\n -0.079 * s * cos(5 * l.D) +\n 0.068 * s * cos(14 * l.D) +\n 0.067 * s * cos(10 * l.D - l.M) +\n 0.054 * s * cos(4 * l.D + l.M) +\n -0.038 * s * cos(12 * l.D - l.M) +\n -0.038 * s * cos(4 * l.D - 2 * l.M) +\n 0.037 * s * cos(7 * l.D) +\n -0.037 * s * cos(4 * l.D + 2 * l.F) +\n -0.035 * s * cos(16 * l.D) +\n -0.030 * s * cos(3 * l.D + l.M) +\n 0.029 * s * cos(l.D - l.M) +\n -0.025 * s * cos(6 * l.D + l.M) +\n 0.023 * s * cos(2 * l.M) +\n 0.023 * s * cos(14 * l.D - l.M) +\n -0.023 * s * cos(2 * (l.D + l.M)) +\n 0.022 * s * cos(6 * l.D - 2 * l.M) +\n -0.021 * s * cos(2 * l.D - 2 * l.F - l.M) +\n -0.020 * s * cos(9 * l.D) +\n 0.019 * s * cos(18 * l.D) +\n 0.017 * s * cos(6 * l.D + 2 * l.F) +\n 0.014 * s * cos(2 * l.F - l.M) +\n -0.014 * s * cos(16 * l.D - l.M) +\n 0.013 * s * cos(4 * l.D - 2 * l.F) +\n 0.012 * s * cos(8 * l.D + l.M) +\n 0.011 * s * cos(11 * l.D) +\n 0.010 * s * cos(5 * l.D + l.M) +\n -0.010 * s * cos(20 * l.D)\n }\n}\n\nvar apsis = {\n EARTH_RADIUS,\n MOON_RADIUS,\n meanPerigee,\n perigee,\n meanApogee,\n apogee,\n apogeeParallax,\n perigeeParallax,\n distance\n};\n\nexports.EARTH_RADIUS = EARTH_RADIUS;\nexports.MOON_RADIUS = MOON_RADIUS;\nexports.apogee = apogee;\nexports.apogeeParallax = apogeeParallax;\nexports[\"default\"] = apsis;\nexports.distance = distance;\nexports.meanApogee = meanApogee;\nexports.meanPerigee = meanPerigee;\nexports.perigee = perigee;\nexports.perigeeParallax = perigeeParallax;\n", "'use strict';\n\nObject.defineProperty(exports, '__esModule', { value: true });\n\nvar base = require('./base.cjs');\n\n/**\n * @copyright 2013 Sonia Keys\n * @copyright 2016 commenthol\n * @license MIT\n * @module binary\n */\nconst { atan, atan2, cos, sqrt, tan } = Math;\n\n/**\n * computes mean anomaly for the given date.\n *\n * @param {Number} year - is a decimal year specifying the date\n * @param {Number} T - is time of periastron, as a decimal year\n * @param {Number} P - is period of revolution in mean solar years\n * @returns {Number} mean anomaly in radians.\n */\nfunction meanAnomaly (year, T, P) { // (year, T, P float64) float64\n const n = 2 * Math.PI / P;\n return base[\"default\"].pmod(n * (year - T), 2 * Math.PI)\n}\n\n/**\n * Position computes apparent position angle and angular distance of\n * components of a binary star.\n *\n * @param {Number} a - is apparent semimajor axis in arc seconds\n * @param {Number} e - is eccentricity of the true orbit\n * @param {Number} i - is inclination relative to the line of sight\n * @param {Number} \u03A9 - is position angle of the ascending node\n * @param {Number} \u03C9 - is longitude of periastron\n * @param {Number} E - is eccentric anomaly, computed for example with package kepler\n * and the mean anomaly as returned by function M in this package.\n * @returns {Number[]} [\u03B8, \u03C1]\n * {Number} \u03B8 -is the apparent position angle in radians,\n * {Number} \u03C1 is the angular distance in arc seconds.\n */\nfunction position (a, e, i, \u03A9, \u03C9, E) { // (a, e, i, \u03A9, \u03C9, E float64) (\u03B8, \u03C1 float64)\n const r = a * (1 - e * cos(E));\n const \u03BD = 2 * atan(sqrt((1 + e) / (1 - e)) * tan(E / 2));\n const [sin\u03BD\u03C9, cos\u03BD\u03C9] = base[\"default\"].sincos(\u03BD + \u03C9);\n const cosi = cos(i);\n const num = sin\u03BD\u03C9 * cosi;\n let \u03B8 = atan2(num, cos\u03BD\u03C9) + \u03A9;\n if (\u03B8 < 0) {\n \u03B8 += 2 * Math.PI;\n }\n const \u03C1 = r * sqrt(num * num + cos\u03BD\u03C9 * cos\u03BD\u03C9);\n return [\u03B8, \u03C1]\n}\n\n/**\n * ApparentEccentricity returns apparent eccenticity of a binary star\n * given true orbital elements.\n *\n * @param {Number} e - is eccentricity of the true orbit\n * @param {Number} i - is inclination relative to the line of sight\n * @param {Number} \u03C9 - is longitude of periastron\n * @returns {Number} apparent eccenticity of a binary star\n */\nfunction apparentEccentricity (e, i, \u03C9) { // (e, i, \u03C9 float64) float64\n const cosi = cos(i);\n const [sin\u03C9, cos\u03C9] = base[\"default\"].sincos(\u03C9);\n const A = (1 - e * e * cos\u03C9 * cos\u03C9) * cosi * cosi;\n const B = e * e * sin\u03C9 * cos\u03C9 * cosi;\n const C = 1 - e * e * sin\u03C9 * sin\u03C9;\n const d = A - C;\n const sqrtD = sqrt(d * d + 4 * B * B);\n return sqrt(2 * sqrtD / (A + C + sqrtD))\n}\n\nvar binary = {\n meanAnomaly,\n position,\n apparentEccentricity\n};\n\nexports.apparentEccentricity = apparentEccentricity;\nexports[\"default\"] = binary;\nexports.meanAnomaly = meanAnomaly;\nexports.position = position;\n", "'use strict';\n\nObject.defineProperty(exports, '__esModule', { value: true });\n\nvar interpolation = require('./interpolation.cjs');\n\n/**\n * @copyright 2013 Sonia Keys\n * @copyright 2016 commenthol\n * @license MIT\n * @module conjunction\n */\n\n/**\n * Planetary computes a conjunction between two moving objects, such as planets.\n *\n * Conjunction is found with interpolation against length 5 ephemerides.\n *\n * t1, t5 are times of first and last rows of ephemerides. The scale is\n * arbitrary.\n *\n * cs1 is the ephemeris of the first object. The columns may be celestial\n * coordinates in right ascension and declination or ecliptic coordinates in\n * longitude and latitude.\n *\n * cs2 is the ephemeris of the second object, in the same frame as the first.\n *\n * Return value t is time of conjunction in the scale of t1, t5.\n *\n * @param {Number} t1 - julian ephemeris day of first row\n * @param {Number} t5 - julian ephemeris day of fifth row\n * @param {Coord[]} cs1 - ephemeris of first moving object\n * @param {Coord[]} cs2 - ephemeris of decond moving object\n * @return {Array}\n * {Number} t - time of conjunction in JDE\n * {Number} \u0394d - is the amount that object 2 was \"above\" object 1 at the time of conjunction.\n */\nfunction planetary (t1, t5, cs1, cs2) {\n if (cs1.length !== 5 || cs2.length !== 5) {\n throw new Error('Five rows required in ephemerides')\n }\n const dr = new Array(5);\n const dd = new Array(5);\n cs1.forEach((r, i) => {\n dr[i] = cs2[i].ra - cs1[i].ra;\n dd[i] = cs2[i].dec - cs1[i].dec;\n });\n return conj(t1, t5, dr, dd)\n}\n\n/**\n * Stellar computes a conjunction between a moving and non-moving object.\n *\n * Arguments and return values same as with Planetary, except the non-moving\n * object is c1. The ephemeris of the moving object is cs2.\n *\n * @param {Number} t1 - julian ephemeris day of first row\n * @param {Number} t5 - julian ephemeris day of fifth row\n * @param {Coord} c1 - ephemeris of non-moving object\n * @param {Coord[]} cs2 - ephemeris of moving object\n * @return {Array}\n * {Number} t - time of conjunction in JDE\n * {Number} \u0394d - is the amount that object 2 was \"above\" object 1 at the time of conjunction.\n */\nfunction stellar (t1, t5, c1, cs2) {\n if (cs2.length !== 5) {\n throw new Error('Five rows required in ephemerides')\n }\n const dr = new Array(5);\n const dd = new Array(5);\n cs2.forEach((r, i) => {\n dr[i] = cs2[i].ra - c1.ra;\n dd[i] = cs2[i].dec - c1.dec;\n });\n return conj(t1, t5, dr, dd)\n}\n\nconst conj = function (t1, t5, dr, dd) { // (t1, t5 float64, dr, dd []float64) (t, \u0394d float64, err error)\n let l5 = new interpolation[\"default\"].Len5(t1, t5, dr);\n const t = l5.zero(true);\n l5 = new interpolation[\"default\"].Len5(t1, t5, dd);\n const \u0394d = l5.interpolateXStrict(t);\n return [t, \u0394d]\n};\n\nvar conjunction = {\n planetary,\n stellar\n};\n\nexports[\"default\"] = conjunction;\nexports.planetary = planetary;\nexports.stellar = stellar;\n", "'use strict';\n\nObject.defineProperty(exports, '__esModule', { value: true });\n\n/**\n * @copyright 2013 Sonia Keys\n * @copyright 2016 commenthol\n * @license MIT\n * @module circle\n */\n\n/**\n * Smallest finds the smallest circle containing three points.\n *\n * Arguments should represent coordinates in right ascension and declination\n * or longitude and latitude. Result \u0394 is the diameter of the circle, typeI\n * is true if solution is of type I.\n *\n * @param {Coord} c1 - ra, dec point 1\n * @param {Coord} c2 - ra, dec point 2\n * @param {Coord} c3 - ra, dec point 3\n * @returns {Array} [\u0394, typeI]\n * {Number} \u0394 - diameter of the circle\n * {Number} typeI - true - Two points on circle, one interior.\n * false - All three points on circle.\n */\nfunction smallest (c1, c2, c3) {\n // Using haversine formula\n const cd1 = Math.cos(c1.dec);\n const cd2 = Math.cos(c2.dec);\n const cd3 = Math.cos(c3.dec);\n let a = 2 * Math.asin(Math.sqrt(hav(c2.dec - c1.dec) + cd1 * cd2 * hav(c2.ra - c1.ra)));\n let b = 2 * Math.asin(Math.sqrt(hav(c3.dec - c2.dec) + cd2 * cd3 * hav(c3.ra - c2.ra)));\n let c = 2 * Math.asin(Math.sqrt(hav(c1.dec - c3.dec) + cd3 * cd1 * hav(c1.ra - c3.ra)));\n if (b > a) {\n [a, b] = noswap(b, a);\n }\n if (c > a) {\n [a, c] = noswap(c, a);\n }\n if (a * a >= b * b + c * c) {\n return [a, true]\n }\n // (20.1) p. 128\n return [2 * a * b * c / Math.sqrt((a + b + c) * (a + b - c) * (b + c - a) * (a + c - b)), false]\n}\n\nconst noswap = function (a, b) {\n return [a, b]\n};\n\n/**\n * haversine function (17.5) p. 115\n */\nconst hav = function (a) {\n return 0.5 * (1 - Math.cos(a))\n};\n\nvar circle = {\n smallest\n};\n\nexports[\"default\"] = circle;\nexports.smallest = smallest;\n", "'use strict';\n\nObject.defineProperty(exports, '__esModule', { value: true });\n\n/**\n * DO NOT EDIT MANUALLY\n * Use `scripts/deltat.js` to generate file.\n * Datasets are from and\n * \n */\nconst m = {\n historic: {\n table: [44, 43, 43, 41, 40, 39, 38, 37, 37, 36, 36, 36, 37, 37, 38, 37, 36, 36, 35, 35, 34, 33, 33, 32, 32, 31, 31, 30, 30, 29, 29, 29, 29, 29, 28, 28, 27, 27, 26, 26, 25, 25, 25, 26, 26, 26, 26, 25, 25, 25, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 23, 23, 23, 23, 22, 22, 22, 22, 22, 21, 21, 21, 21, 21, 21, 21, 21, 20, 20, 20, 20, 20, 20, 20, 20, 20, 21, 21, 21, 20, 20, 20, 20, 20, 19, 19, 19, 19, 19, 20, 20, 20, 20, 19, 20, 20, 20, 20, 20, 20, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21.1, 21, 21, 21, 20.9, 20.8, 20.7, 20.6, 20.4, 20.2, 20, 19.7, 19.4, 19.1, 18.7, 18.3, 17.8, 17.4, 17, 16.8, 16.6, 16.4, 16.1, 15.9, 15.7, 15.5, 15.3, 15, 14.7, 14.5, 14.3, 14.2, 14.1, 14.1, 14.1, 13.9, 13.7, 13.6, 13.5, 13.5, 13.5, 13.5, 13.4, 13.4, 13.4, 13.4, 13.3, 13.3, 13.2, 13.2, 13.2, 13.1, 13.1, 13.1, 13, 13.2, 13.3, 13.4, 13.5, 13.6, 13.7, 13.8, 13.9, 14, 14, 14.1, 14.1, 14.1, 14.1, 14.2, 14.3, 14.4, 14.4, 14.5, 14.6, 14.6, 14.7, 14.7, 14.7, 14.8, 14.8, 14.9, 14.9, 15, 15, 15.1, 15.2, 15.3, 15.4, 15.5, 15.6, 15.6, 15.6, 15.8, 15.9, 15.9, 15.9, 15.8, 15.7, 15.8, 15.7, 15.7, 15.7, 15.8, 15.9, 16.1, 16.1, 16, 15.9, 15.9, 15.7, 15.4, 15.3, 15.4, 15.5, 15.6, 15.6, 15.6, 15.6, 15.6, 15.6, 15.6, 15.5, 15.5, 15.4, 15.3, 15.2, 15.1, 14.9, 14.8, 14.6, 14.4, 14.3, 14.2, 14.1, 14.2, 14.2, 13.9, 13.7, 13.5, 13.3, 13.1, 13, 13.2, 13.2, 13.1, 13.1, 13.2, 13.3, 13.5, 13.5, 13.4, 13.2, 13.2, 13.1, 13.1, 13, 12.8, 12.6, 12.7, 12.6, 12.3, 12, 11.9, 11.8, 11.6, 11.4, 11.2, 11.1, 11.1, 11.1, 11.1, 11.1, 11.2, 11.1, 11.1, 11.2, 11.4, 11.5, 11.3, 11.2, 11.4, 11.7, 11.9, 11.9, 11.9, 11.8, 11.7, 11.8, 11.8, 11.8, 11.7, 11.6, 11.6, 11.5, 11.5, 11.4, 11.4, 11.3, 11.3, 11.13, 11.16, 10.94, 10.72, 10.29, 10.04, 9.94, 9.91, 9.88, 9.86, 9.72, 9.67, 9.66, 9.64, 9.51, 9.4, 9.21, 9, 8.6, 8.29, 7.95, 7.73, 7.59, 7.49, 7.36, 7.26, 7.1, 7, 6.89, 6.82, 6.73, 6.64, 6.39, 6.28, 6.25, 6.27, 6.25, 6.27, 6.22, 6.24, 6.22, 6.27, 6.3, 6.36, 6.35, 6.37, 6.32, 6.33, 6.33, 6.37, 6.37, 6.41, 6.4, 6.44, 6.46, 6.51, 6.48, 6.51, 6.53, 6.58, 6.55, 6.61, 6.69, 6.8, 6.84, 6.94, 7.03, 7.13, 7.15, 7.22, 7.26, 7.3, 7.23, 7.22, 7.21, 7.2, 6.99, 6.98, 7.19, 7.36, 7.35, 7.39, 7.41, 7.45, 7.36, 7.18, 6.95, 6.72, 6.45, 6.24, 5.92, 5.59, 5.15, 4.67, 4.11, 3.52, 2.94, 2.47, 1.97, 1.52, 1.04, 0.6, 0.11, -0.34, -0.82, -1.25, -1.7, -2.08, -2.48, -2.82, -3.19, -3.5, -3.84, -4.14, -4.43, -4.59, -4.79, -4.92, -5.09, -5.24, -5.36, -5.34, -5.37, -5.32, -5.34, -5.33, -5.4, -5.47, -5.58, -5.66, -5.74, -5.68, -5.69, -5.65, -5.67, -5.68, -5.73, -5.72, -5.78, -5.79, -5.86, -5.89, -6.01, -6.13, -6.28, -6.41, -6.53, -6.49, -6.5, -6.45, -6.41, -6.26, -6.11, -5.9, -5.63, -5.13, -4.68, -4.19, -3.72, -3.21, -2.7, -2.09, -1.48, -0.75, -0.08, 0.62, 1.26, 1.95, 2.59, 3.28, 3.92, 4.61, 5.2, 5.73, 6.29, 7, 7.68, 8.45, 9.13, 9.78, 10.38, 10.99, 11.64, 12.47, 13.23, 14, 14.69, 15.38, 16, 16.64, 17.19, 17.72, 18.19, 18.67, 19.13, 19.69, 20.14, 20.54, 20.86, 21.14, 21.41, 21.78, 22.06, 22.3, 22.51, 22.79, 23.01, 23.29, 23.46, 23.55, 23.63, 23.8, 23.95, 24.25, 24.39, 24.42, 24.34, 24.22, 24.1, 24.08, 24.02, 24.04, 23.98, 23.91, 23.89, 23.95, 23.93, 23.92, 23.88, 23.94, 23.91, 23.82, 23.76, 23.87, 23.91, 23.95, 23.96, 24, 24.04, 24.2, 24.35, 24.61, 24.82, 25.09, 25.3, 25.56, 25.77, 26.05, 26.27, 26.54, 26.76, 27.04, 27.27, 27.55, 27.77, 28.03, 28.25, 28.5, 28.7, 28.95, 29.15, 29.38, 29.57, 29.8, 29.97, 30.19, 30.36, 30.57, 30.72, 30.93, 31.07, 31.24, 31.349, 31.516, 31.677, 31.923, 32.166, 32.449, 32.671, 32.919, 33.15, 33.397, 33.584, 33.804, 33.992, 34.24, 34.466, 34.731, 35.03, 35.4, 35.738, 36.147, 36.546, 36.995, 37.429, 37.879, 38.291, 38.753, 39.204, 39.707, 40.182, 40.706, 41.17, 41.686, 42.227, 42.825, 43.373, 43.959, 44.486, 44.997, 45.477, 45.983, 46.458, 46.997, 47.521, 48.034, 48.535, 49.099, 49.589, 50.102, 50.54, 50.975, 51.382, 51.81, 52.168, 52.572, 52.957, 53.434, 53.789, 54.087],\n first: 1657,\n last: 1984.5\n },\n data: {\n table: [43.4724372, 43.5648351, 43.6736863, 43.7782156, 43.8763273, 43.9562443, 44.0314956, 44.1131788, 44.1982187, 44.2951747, 44.3936471, 44.4840562, 44.5646335, 44.6425099, 44.7385767, 44.8370135, 44.9302138, 44.9986146, 45.0583549, 45.1283911, 45.2063835, 45.2980068, 45.3897017, 45.476138, 45.5632485, 45.6450189, 45.7374593, 45.8283721, 45.9132976, 45.9819705, 46.0407484, 46.1067084, 46.1825041, 46.2788561, 46.3713351, 46.4567207, 46.544486, 46.6310899, 46.7302231, 46.8283588, 46.9247443, 46.9969757, 47.0709148, 47.1450515, 47.2361542, 47.3413241, 47.4319364, 47.5213815, 47.6049313, 47.6837388, 47.7781381, 47.8770756, 47.9687104, 48.0348257, 48.0942021, 48.1608205, 48.2460028, 48.3438529, 48.4355405, 48.5344163, 48.6324506, 48.7293718, 48.8365414, 48.9353232, 49.0318781, 49.1013205, 49.1590844, 49.2285534, 49.3069683, 49.4017939, 49.4945263, 49.5861495, 49.6804907, 49.7602264, 49.8555805, 49.9489224, 50.0346777, 50.1018531, 50.1621723, 50.2260014, 50.2967905, 50.3831254, 50.4598772, 50.5387068, 50.6160484, 50.6865941, 50.7658362, 50.8453698, 50.918672, 50.9761148, 51.0278017, 51.084323, 51.1537928, 51.2318645, 51.306308, 51.3807849, 51.4526292, 51.5160394, 51.5985479, 51.680924, 51.7572854, 51.8133335, 51.8532385, 51.9014358, 51.9603433, 52.0328072, 52.0984957, 52.1667826, 52.2316418, 52.2938376, 52.3679897, 52.4465221, 52.5179552, 52.5751485, 52.6178012, 52.666816, 52.7340036, 52.8055792, 52.8792189, 52.9564838, 53.0444971, 53.126769, 53.2196749, 53.3024139, 53.3746645, 53.4335399, 53.4778015, 53.5299937, 53.5845392, 53.6522628, 53.7255844, 53.7882418, 53.8366625, 53.8829665, 53.9442904, 54.0042478, 54.0536342, 54.085644, 54.1084122, 54.1462942, 54.1913988, 54.2452023, 54.2957622, 54.3427024, 54.3910864, 54.4319877, 54.4897699, 54.545636, 54.597741, 54.6354962, 54.6532352, 54.677594, 54.7173643, 54.7740957, 54.8253023, 54.8712512, 54.916146, 54.9580535, 54.9997186, 55.047571, 55.0911778, 55.1132386, 55.132774, 55.1532423, 55.1898003, 55.2415531, 55.283803, 55.3222105, 55.3612676, 55.406262, 55.4628719, 55.5110909, 55.5523777, 55.5811877, 55.6004372, 55.626202, 55.6656271, 55.7167999, 55.7698097, 55.8196609, 55.8615028, 55.9129883, 55.9663474, 56.0220102, 56.0700015, 56.0939035, 56.110463, 56.1313736, 56.1610839, 56.2068432, 56.2582503, 56.3000349, 56.339902, 56.3789995, 56.4282839, 56.4803947, 56.5352164, 56.5697487, 56.5983102, 56.6328326, 56.6738814, 56.7332116, 56.7971596, 56.8552701, 56.9111378, 56.9754725, 57.0470772, 57.1136128, 57.173831, 57.2226068, 57.259731, 57.3072742, 57.3643368, 57.4334281, 57.5015747, 57.5653127, 57.6333396, 57.6972844, 57.7710774, 57.8407427, 57.9057801, 57.9575663, 57.9974929, 58.0425517, 58.1043319, 58.1679128, 58.2389092, 58.3091659, 58.3833021, 58.4536748, 58.5401438, 58.6227714, 58.6916662, 58.7409628, 58.7836189, 58.8405543, 58.898579, 58.9713678, 59.043837, 59.1218414, 59.2002687, 59.274737, 59.3574134, 59.4433827, 59.5242416, 59.5849787, 59.6343497, 59.6927827, 59.758805, 59.8386448, 59.9110567, 59.9844537, 60.056435, 60.123065, 60.2042185, 60.2803745, 60.3530352, 60.4011891, 60.4439959, 60.4900257, 60.5578054, 60.6324446, 60.7058569, 60.7853482, 60.8663504, 60.9386672, 61.0276757, 61.1103448, 61.1870458, 61.2453891, 61.2881024, 61.3377799, 61.4036165, 61.4760366, 61.5524599, 61.6286593, 61.6845819, 61.743306, 61.8132425, 61.8823203, 61.9496762, 61.9968743, 62.0342938, 62.0714108, 62.1202315, 62.1809508, 62.2382046, 62.2950486, 62.3506479, 62.3995381, 62.475395, 62.5463091, 62.6136031, 62.6570739, 62.6941742, 62.7383271, 62.7926305, 62.8566986, 62.9145607, 62.9658689, 63.0216632, 63.0807052, 63.1461718, 63.2052946, 63.2599441, 63.2844088, 63.2961369, 63.3126092, 63.3421622, 63.3871303, 63.4339302, 63.4673369, 63.4978642, 63.5319327, 63.5679441, 63.6104432, 63.6444291, 63.6641815, 63.6739403, 63.692603, 63.7147066, 63.7518055, 63.792717, 63.8285221, 63.8556871, 63.8803854, 63.9075025, 63.9392787, 63.9690744, 63.9798604, 63.9833077, 63.9938011, 64.0093384, 64.0399621, 64.0670429, 64.0907881, 64.1068077, 64.1282125, 64.1584211, 64.1832722, 64.2093975, 64.2116628, 64.2073173, 64.2115565, 64.2222858, 64.2499625, 64.2760973, 64.2998037, 64.3191858, 64.345013, 64.3734584, 64.3943291, 64.4151156, 64.4132064, 64.4118464, 64.4096536, 64.4167832, 64.43292, 64.4510529, 64.4734276, 64.4893377, 64.5053342, 64.5269189, 64.5470942, 64.5596729, 64.5512293, 64.5370906, 64.5359472, 64.5414947, 64.5543634, 64.5654298, 64.5736111, 64.5891142, 64.6014759, 64.6176147, 64.6374397, 64.6548674, 64.6530021, 64.6379271, 64.637161, 64.6399614, 64.6543152, 64.6723164, 64.6876311, 64.7051905, 64.7313433, 64.7575312, 64.7811143, 64.8000929, 64.7994561, 64.7876424, 64.783095, 64.7920604, 64.8096421, 64.8310888, 64.8451826, 64.8597013, 64.8849929, 64.9174991, 64.9480298, 64.9793881, 64.9894772, 65.0028155, 65.0138193, 65.0371432, 65.0772597, 65.112197, 65.1464034, 65.1832638, 65.2145358, 65.2493713, 65.2920645, 65.3279403, 65.3413366, 65.3451881, 65.34964, 65.3711307, 65.3971998, 65.4295547, 65.4573487, 65.486752, 65.5152012, 65.5449916, 65.5780768, 65.612728, 65.6287505, 65.6370091, 65.6493375, 65.6759928, 65.7096966, 65.746092, 65.7768362, 65.8024614, 65.8236695, 65.8595036, 65.8973008, 65.932291, 65.950911, 65.9534105, 65.962833, 65.9838647, 66.0146733, 66.042049, 66.0699217, 66.0961343, 66.1310116, 66.1682713, 66.2071627, 66.2355846, 66.2408549, 66.2335423, 66.2349107, 66.2441095, 66.2751123, 66.3054334, 66.3245568, 66.3405713, 66.3624433, 66.3957101, 66.428903, 66.4618675, 66.4748837, 66.4751281, 66.4828678, 66.5056165, 66.5382912, 66.5705628, 66.6030198, 66.6339689, 66.6569117, 66.6925011, 66.7288729, 66.7578719, 66.7707625, 66.7740427, 66.7846288, 66.810324, 66.840048, 66.8778601, 66.9069091, 66.944259, 66.9762508, 67.0258126, 67.0716286, 67.1100184, 67.1266401, 67.1331391, 67.145797, 67.17174, 67.2091069, 67.2459812, 67.2810383, 67.3136452, 67.3456968, 67.389003, 67.4318433, 67.4666209, 67.4858459, 67.4989147, 67.5110936, 67.5352658, 67.571103, 67.6070253, 67.6439167, 67.6765272, 67.7116693, 67.7590634, 67.8011542, 67.840213, 67.8606318, 67.8821576, 67.9120101, 67.9546462, 68.0054839, 68.051412, 68.1024205, 68.1577127, 68.2043653, 68.2664507, 68.3188171, 68.3703564, 68.3964356, 68.4094472, 68.4304611, 68.4629791, 68.507818, 68.5537018, 68.5927179, 68.6298107, 68.6670627, 68.7135208, 68.7622755, 68.8032843, 68.8244838, 68.8373427, 68.847693, 68.8688567, 68.9005814, 68.9354999, 68.9676423, 68.9875354, 69.0175527, 69.0499081, 69.0823433, 69.1070034, 69.1134027, 69.1141898, 69.1207203, 69.1355578, 69.16459, 69.1964228, 69.2201632, 69.2451564, 69.2732758, 69.3031979, 69.3325675, 69.3540507, 69.3581722, 69.3441594, 69.3376329, 69.3377424, 69.3432191, 69.3540144, 69.3611554, 69.3751703, 69.3889904, 69.4091639, 69.4264662, 69.4386335, 69.4241335, 69.3921241, 69.3693422, 69.3574782, 69.3593242, 69.3630244, 69.359334, 69.3510133, 69.3537917, 69.3582217, 69.367306, 69.3678649, 69.3514228, 69.3273414, 69.3033273, 69.2892463, 69.2880419, 69.2908014, 69.2944974, 69.2913953, 69.286149, 69.2835153, 69.2815422, 69.2806375, 69.2553511, 69.2125426, 69.1847287, 69.17207, 69.1691531, 69.173303, 69.1698064, 69.1589095, 69.1556275, 69.1672253, 69.1771384],\n first: 1973.0849315068492,\n firstYM: [1973, 2],\n last: 2023.3287671232877,\n lastYM: [2023, 5]\n },\n prediction: {\n table: [67.87818, 67.96817999999999, 68.02817999999999, 68.04818, 68.12818, 68.21817999999999, 68.26818, 68.28818, 68.36818, 68.44818, 68.50818, 68.51818, 68.59818, 68.68818, 68.73818, 68.74817999999999, 68.82818, 68.91817999999999, 68.96817999999999, 68.98818, 69.06818, 69.14818, 69.20818, 69.22818, 69.30818, 69.39818, 69.46817999999999, 69.48818, 69.57818, 69.66817999999999, 69.73818, 69.75818, 69.85817999999999, 69.95818, 70.02817999999999, 70.05818, 70.15818, 70.25818, 70.33818, 70.36818, 70.46817999999999],\n first: 2022,\n last: 2032\n }\n};\n\nexports[\"default\"] = m;\n", "'use strict';\n\nObject.defineProperty(exports, '__esModule', { value: true });\n\nvar base = require('./base.cjs');\nvar interpolation = require('./interpolation.cjs');\nvar deltat$1 = require('./data/deltat.cjs');\n\n/**\n * @copyright 2013 Sonia Keys\n * @copyright 2016 commenthol\n * @license MIT\n * @module deltat\n */\n\n// avoids ciclic import { LeapYearGregorian } from './julian.js'\nfunction LeapYearGregorian (y) {\n return (y % 4 === 0 && y % 100 !== 0) || y % 400 === 0\n}\n\n/**\n * deltaT returns the difference \u0394T = TD - UT between Dynamical Time TD and\n * Univeral Time (GMT+12) in seconds\n *\n * Polynoms are from \n * and \n *\n * @param {Number} dyear - decimal year\n * @returns {Number} \u0394T in seconds.\n */\nfunction deltaT (dyear) {\n let \u0394T;\n if (dyear < -500) {\n \u0394T = base[\"default\"].horner((dyear - 1820) * 0.01, -20, 0, 32);\n } else if (dyear < 500) {\n \u0394T = base[\"default\"].horner(dyear * 0.01,\n 10583.6, -1014.41, 33.78311, -5.952053, -0.1798452, 0.022174192, 0.0090316521\n );\n } else if (dyear < 1600) {\n \u0394T = base[\"default\"].horner((dyear - 1000) * 0.01,\n 1574.2, -556.01, 71.23472, 0.319781, -0.8503463, -0.005050998, 0.0083572073\n );\n } else if (dyear < deltat$1[\"default\"].historic.first) {\n \u0394T = base[\"default\"].horner((dyear - 1600), 120, -0.9808, -0.01532, 1 / 7129);\n } else if (dyear < deltat$1[\"default\"].data.first) {\n \u0394T = interpolate(dyear, deltat$1[\"default\"].historic);\n } else if (dyear < deltat$1[\"default\"].data.last - 0.25) { // -0.25 ~= do not consider last 3 months in dataset\n \u0394T = interpolateData(dyear, deltat$1[\"default\"].data);\n } else if (dyear < deltat$1[\"default\"].prediction.last) {\n \u0394T = interpolate(dyear, deltat$1[\"default\"].prediction);\n } else if (dyear < 2050) {\n \u0394T = base[\"default\"].horner((dyear - 2000) / 100, 62.92, 32.217, 55.89);\n } else if (dyear < 2150) {\n \u0394T = base[\"default\"].horner((dyear - 1820) / 100, -205.72, 56.28, 32);\n } else {\n const u = (dyear - 1820) / 100;\n \u0394T = -20 + 32 * u * u;\n }\n return \u0394T\n}\n\n/**\n * interpolation of dataset\n * @private\n * @param {Number} dyear - julian year\n * @returns {Number} \u0394T in seconds.\n */\nfunction interpolate (dyear, data) {\n const d3 = interpolation[\"default\"].len3ForInterpolateX(dyear,\n data.first, data.last, data.table\n );\n return d3.interpolateX(dyear)\n}\n\n/**\n * interpolation of dataset from finals2000A with is one entry per month\n * linear interpolation over whole dataset is inaccurate as points per month\n * are not equidistant. Therefore points are approximated using 2nd diff. interpolation\n * from current month using the following two points\n *\n * @private\n * @param {Number} dyear - julian year\n * @returns {Number} \u0394T in seconds.\n */\nfunction interpolateData (dyear, data) {\n const [fyear, fmonth] = data.firstYM;\n const { year, month, first, last } = monthOfYear(dyear);\n const pos = 12 * (year - fyear) + (month - fmonth);\n const table = data.table.slice(pos, pos + 3);\n const d3 = new interpolation[\"default\"].Len3(first, last, table);\n return d3.interpolateX(dyear)\n}\n\n/**\n * Get month of Year from fraction. Fraction differs at leap years.\n * @private\n * @param {Number} dyear - decimal year\n * @return {Object} `{year: Number, month: Number, first: Number, last}`\n */\nfunction monthOfYear (dyear) {\n // if (!monthOfYear.data) { // memoize yearly fractions per month\n // monthOfYear.data = { 0: [], 1: [] }\n // for (let m = 0; m <= 12; m++) {\n // monthOfYear.data[0][m] = new Calendar(1999, m, 1).toYear() - 1999 // non leap year\n // monthOfYear.data[1][m] = new Calendar(2000, m, 1).toYear() - 2000 // leap year\n // }\n // }\n // console.log(monthOfYear)\n const year = dyear | 0;\n const f = dyear - year;\n const d = LeapYearGregorian(year) ? 1 : 0;\n const data = monthOfYear.data[d];\n\n let month = 12; // TODO loop could be improved\n while (month > 0 && data[month] > f) {\n month--;\n }\n const first = year + data[month];\n const last = month < 11 ? year + data[month + 2] : year + 1 + data[(month + 2) % 12];\n return { year, month, first, last }\n}\n/**\n monthOfYear.data[0][m] = new Calendar(1999, m, 1).toYear() - 1999 // non leap year\n monthOfYear.data[1][m] = new Calendar(2000, m, 1).toYear() - 2000 // leap year\n */\nmonthOfYear.data = [\n [ // non leap year\n 0,\n 0,\n 0.08493150684921602,\n 0.16164383561635987,\n 0.24657534246580326,\n 0.3287671232876619,\n 0.4136986301368779,\n 0.4958904109589639,\n 0.5808219178081799,\n 0.6657534246576233,\n 0.747945205479482,\n 0.832876712328698,\n 0.915068493150784\n ],\n [ // leap year\n 0,\n 0,\n 0.08743169398917416,\n 0.1639344262296163,\n 0.24863387978143692,\n 0.3306010928961314,\n 0.4153005464481794,\n 0.49726775956287383,\n 0.5819672131146945,\n 0.6666666666667425,\n 0.7486338797814369,\n 0.8333333333332575,\n 0.9153005464481794\n ]\n];\n\nvar deltat = {\n deltaT\n};\n\nexports[\"default\"] = deltat;\nexports.deltaT = deltaT;\n", "'use strict';\n\nObject.defineProperty(exports, '__esModule', { value: true });\n\n/**\n * @copyright 2013 Sonia Keys\n * @copyright 2016 commenthol\n * @license MIT\n * @module iterate\n */\n/**\n * Iterate: Chapter 5, Iteration.\n *\n * This package is best considered illustrative. While the functions are\n * usable, they are minimal in showing the points of the chapter text. More\n * robust functions would handle more cases of overflow, loss of precision,\n * and divergence.\n */\n\n/**\n * decimalPlaces iterates to a fixed number of decimal places.\n *\n * Inputs are an improvement function, a starting value, the number of\n * decimal places desired in the result, and an iteration limit.\n *\n * @throws Error\n * @param {Function} better\n * @param {Number} start - (float)\n * @param {Number} places - (int)\n * @param {Number} maxIterations - (int)\n * @returns {Number}\n */\nfunction decimalPlaces (better, start, places, maxIterations) {\n const d = Math.pow(10, -places);\n for (let i = 0; i < maxIterations; i++) {\n const n = better(start);\n if (Math.abs(n - start) < d) {\n return n\n }\n start = n;\n }\n throw new Error('Maximum iterations reached')\n}\n\n/**\n * fullPrecison iterates to (nearly) the full precision of a float64.\n *\n * To allow for a little bit of floating point jitter, FullPrecision iterates\n * to 15 significant figures, which is the maximum number of full significant\n * figures representable in a float64, but still a couple of bits shy of the\n * full representable precision.\n *\n * @throws Error\n * @param {Function} better\n * @param {Number} start - (float)\n * @param {Number} maxIterations - (int)\n * @returns {Number}\n */\nfunction fullPrecision (better, start, maxIterations) {\n for (let i = 0; i < maxIterations; i++) {\n const n = better(start);\n if (Math.abs((n - start) / n) < 1e-15) {\n return n\n }\n start = n;\n }\n throw new Error('Maximum iterations reached')\n}\n\n/**\n * binaryRoot finds a root between given bounds by binary search.\n *\n * Inputs are a function on x and the bounds on x. A root must exist between\n * the given bounds, otherwise the result is not meaningful.\n *\n * @param {Function} f - root function\n * @param {Number} lower - (float)\n * @param {Number} upper - (float)\n * @returns {Number}\n */\nfunction binaryRoot (f, lower, upper) {\n let yLower = f(lower);\n let mid = 0;\n for (let j = 0; j < 52; j++) {\n mid = (lower + upper) / 2;\n const yMid = f(mid);\n if (yMid === 0) {\n break\n }\n if (signbit(yLower) === signbit(yMid)) {\n lower = mid;\n yLower = yMid;\n } else {\n upper = mid;\n }\n }\n return mid\n}\n\nfunction signbit (v) {\n return (v < 0)\n}\n\nvar iterate = {\n decimalPlaces,\n fullPrecision,\n binaryRoot\n};\n\nexports.binaryRoot = binaryRoot;\nexports.decimalPlaces = decimalPlaces;\nexports[\"default\"] = iterate;\nexports.fullPrecision = fullPrecision;\n", "'use strict';\n\nObject.defineProperty(exports, '__esModule', { value: true });\n\nvar base = require('./base.cjs');\nvar iterate = require('./iterate.cjs');\n\n/**\n * @copyright 2013 Sonia Keys\n * @copyright 2016 commenthol\n * @license MIT\n * @module kepler\n */\n\n/**\n * True returns true anomaly \u03BD for given eccentric anomaly E.\n *\n * @param {number} e - eccentricity\n * @param {number} E - eccentric anomaly in radians.\n * @return true anomaly \u03BD in radians.\n */\nfunction trueAnomaly (E, e) {\n // (30.1) p. 195\n return 2 * Math.atan(Math.sqrt((1 + e) / (1 - e)) * Math.tan(E * 0.5))\n}\n\n/**\n * Radius returns radius distance r for given eccentric anomaly E.\n *\n * Result unit is the unit of semimajor axis a (typically AU.)\n *\n * @param {number} e - eccentricity\n * @param {number} E - eccentric anomaly in radians\n * @param {number} a - semimajor axis\n * @return {number} radius distance in unit of `a`\n */\nfunction radius (E, e, a) { // (E, e, a float64) float64\n // (30.2) p. 195\n return a * (1 - e * Math.cos(E))\n}\n\n/**\n * Kepler1 solves Kepler's equation by iteration.\n *\n * The iterated formula is\n *\n * E1 = m + e * sin(E0)\n *\n * For some vaues of e and M it will fail to converge and the\n * function will return an error.\n *\n * @throws Error\n * @param {number} e - eccentricity\n * @param {number} m - mean anomaly in radians\n * @param {number} places - (int) desired number of decimal places in the result\n * @return {number} eccentric anomaly `E` in radians.\n */\nfunction kepler1 (e, m, places) {\n const f = function (E0) {\n return m + e * Math.sin(E0) // (30.5) p. 195\n };\n return iterate[\"default\"].decimalPlaces(f, m, places, places * 5)\n}\n\n/**\n * Kepler2 solves Kepler's equation by iteration.\n *\n * The iterated formula is\n *\n * E1 = E0 + (m + e * sin(E0) - E0) / (1 - e * cos(E0))\n *\n * The function converges over a wider range of inputs than does Kepler1\n * but it also fails to converge for some values of e and M.\n *\n * @throws Error\n * @param {number} e - eccentricity\n * @param {number} m - mean anomaly in radians\n * @param {number} places - (int) desired number of decimal places in the result\n * @return {number} eccentric anomaly `E` in radians.\n */\nfunction kepler2 (e, m, places) { // (e, M float64, places int) (E float64, err error)\n const f = function (E0) {\n const [se, ce] = base[\"default\"].sincos(E0);\n return E0 + (m + e * se - E0) / (1 - e * ce) // (30.7) p. 199\n };\n return iterate[\"default\"].decimalPlaces(f, m, places, places)\n}\n\n/**\n * Kepler2a solves Kepler's equation by iteration.\n *\n * The iterated formula is the same as in Kepler2 but a limiting function\n * avoids divergence.\n *\n * @throws Error\n * @param {number} e - eccentricity\n * @param {number} m - mean anomaly in radians\n * @param {number} places - (int) desired number of decimal places in the result\n * @return {number} eccentric anomaly `E` in radians.\n */\nfunction kepler2a (e, m, places) { // (e, M float64, places int) (E float64, err error)\n const f = function (E0) {\n const [se, ce] = base[\"default\"].sincos(E0);\n // method of Leing\u00E4rtner, p. 205\n return E0 + Math.asin(Math.sin((m + e * se - E0) / (1 - e * ce)))\n };\n return iterate[\"default\"].decimalPlaces(f, m, places, places * 5)\n}\n\n/**\n * Kepler2b solves Kepler's equation by iteration.\n *\n * The iterated formula is the same as in Kepler2 but a (different) limiting\n * function avoids divergence.\n *\n * @throws Error\n * @param {number} e - eccentricity\n * @param {number} m - mean anomaly in radians\n * @param {number} places - (int) desired number of decimal places in the result\n * @return {number} eccentric anomaly `E` in radians.\n */\nfunction kepler2b (e, m, places) { // (e, M float64, places int) (E float64, err error)\n const f = function (E0) {\n const [se, ce] = base[\"default\"].sincos(E0);\n let d = (m + e * se - E0) / (1 - e * ce);\n // method of Steele, p. 205\n if (d > 0.5) {\n d = 0.5;\n } else if (d < -0.5) {\n d = -0.5;\n }\n return E0 + d\n };\n return iterate[\"default\"].decimalPlaces(f, m, places, places)\n}\n\n/**\n * Kepler3 solves Kepler's equation by binary search.\n *\n * @throws Error\n * @param {number} e - eccentricity\n * @param {number} m - mean anomaly in radians\n * @return {number} eccentric anomaly `E` in radians.\n */\nfunction kepler3 (e, m) { // (e, m float64) (E float64)\n // adapted from BASIC, p. 206\n m = base[\"default\"].pmod(m, 2 * Math.PI);\n let f = 1;\n if (m > Math.PI) {\n f = -1;\n m = 2 * Math.PI - m;\n }\n let E0 = Math.PI * 0.5;\n let d = Math.PI * 0.25;\n for (let i = 0; i < 53; i++) {\n const M1 = E0 - e * Math.sin(E0);\n if (m - M1 < 0) {\n E0 -= d;\n } else {\n E0 += d;\n }\n d *= 0.5;\n }\n if (f < 0) {\n return -E0\n }\n return E0\n}\n\n/**\n * Kepler4 returns an approximate solution to Kepler's equation.\n *\n * It is valid only for small values of e.\n *\n * @param {number} e - eccentricity\n * @param {number} m - mean anomaly in radians\n * @return {number} eccentric anomaly `E` in radians.\n */\nfunction kepler4 (e, m) { // (e, m float64) (E float64)\n const [sm, cm] = base[\"default\"].sincos(m);\n return Math.atan2(sm, cm - e) // (30.8) p. 206\n}\n\nvar kepler = {\n trueAnomaly,\n true: trueAnomaly, // BACKWARDS-COMPATIBILITY\n radius,\n kepler1,\n kepler2,\n kepler2a,\n kepler2b,\n kepler3,\n kepler4\n};\n\nexports[\"default\"] = kepler;\nexports.kepler1 = kepler1;\nexports.kepler2 = kepler2;\nexports.kepler2a = kepler2a;\nexports.kepler2b = kepler2b;\nexports.kepler3 = kepler3;\nexports.kepler4 = kepler4;\nexports.radius = radius;\nexports.trueAnomaly = trueAnomaly;\n", "'use strict';\n\nObject.defineProperty(exports, '__esModule', { value: true });\n\nvar base = require('./base.cjs');\nvar sexagesimal = require('./sexagesimal.cjs');\nvar coord = require('./coord.cjs');\nvar precess = require('./precess.cjs');\n\n/**\n * @copyright 2013 Sonia Keys\n * @copyright 2016 commenthol\n * @license MIT\n * @module planetposition\n */\n\nfunction sum (t, series) {\n const coeffs = [];\n Object.keys(series).forEach((x) => {\n coeffs[x] = 0;\n let y = series[x].length - 1;\n for (y; y >= 0; y--) {\n const term = {\n a: series[x][y][0],\n b: series[x][y][1],\n c: series[x][y][2]\n };\n coeffs[x] += term.a * Math.cos(term.b + term.c * t);\n }\n });\n const res = base[\"default\"].horner(t, ...coeffs);\n return res\n}\n\nclass Planet {\n /**\n * VSOP87 representation of a Planet\n * @constructs Planet\n * @param {object} planet - planet data series\n * @example\n * ```js\n * // for use in browser\n * import {data} from 'astronomia'\n * const earth = new planetposition.Planet(data.vsop87Bearth)\n * ```\n */\n constructor (planet) {\n if (typeof planet !== 'object') throw new TypeError('need planet vsop87 data')\n this.name = planet.name;\n this.type = planet.type || 'B';\n this.series = planet;\n }\n\n /**\n * Position2000 returns ecliptic position of planets by full VSOP87 theory.\n *\n * @param {Number} jde - the date for which positions are desired.\n * @returns {Coord} Results are for the dynamical equinox and ecliptic J2000.\n * {Number} lon - heliocentric longitude in radians.\n * {Number} lat - heliocentric latitude in radians.\n * {Number} range - heliocentric range in AU.\n */\n position2000 (jde) {\n const T = base[\"default\"].J2000Century(jde);\n const \u03C4 = T * 0.1;\n const lon = base[\"default\"].pmod(sum(\u03C4, this.series.L), 2 * Math.PI);\n const lat = sum(\u03C4, this.series.B);\n const range = sum(\u03C4, this.series.R);\n\n switch (this.type) {\n case 'B':\n return new base[\"default\"].Coord(lon, lat, range)\n case 'D': {\n const eclFrom = new coord[\"default\"].Ecliptic(lon, lat);\n const epochFrom = base[\"default\"].JDEToJulianYear(jde);\n const epochTo = 2000.0;\n const eclTo = precess[\"default\"].eclipticPosition(eclFrom, epochFrom, epochTo);\n return new base[\"default\"].Coord(eclTo.lon, eclTo.lat, range)\n }\n }\n }\n\n /**\n * Position returns ecliptic position of planets at equinox and ecliptic of date.\n *\n * @param {Number} jde - the date for which positions are desired.\n * @returns {Coord} Results are positions consistent with those from Meeus's\n * Apendix III, that is, at equinox and ecliptic of date.\n * {Number} lon - heliocentric longitude in radians.\n * {Number} lat - heliocentric latitude in radians.\n * {Number} range - heliocentric range in AU.\n */\n position (jde) {\n const T = base[\"default\"].J2000Century(jde);\n const \u03C4 = T * 0.1;\n const lon = base[\"default\"].pmod(sum(\u03C4, this.series.L), 2 * Math.PI);\n const lat = sum(\u03C4, this.series.B);\n const range = sum(\u03C4, this.series.R);\n\n switch (this.type) {\n case 'B': {\n const eclFrom = new coord[\"default\"].Ecliptic(lon, lat);\n const epochFrom = 2000.0;\n const epochTo = base[\"default\"].JDEToJulianYear(jde);\n const eclTo = precess[\"default\"].eclipticPosition(eclFrom, epochFrom, epochTo);\n return new base[\"default\"].Coord(eclTo.lon, eclTo.lat, range)\n }\n case 'D':\n return new base[\"default\"].Coord(lon, lat, range)\n }\n }\n}\n\n/**\n * ToFK5 converts ecliptic longitude and latitude from dynamical frame to FK5.\n *\n * @param {Number} lon - ecliptic longitude in radians\n * @param {Number} lat - ecliptic latitude in radians\n * @param {Number} jde - Julian ephemeris day\n * @return {Coord}\n * {Number} lon - FK5 longitude\n * {Number} lat - FK5 latitude\n */\nfunction toFK5 (lon, lat, jde) {\n // formula 32.3, p. 219.\n const T = base[\"default\"].J2000Century(jde);\n // const Lp = lon - 1.397 * Math.PI / 180 * T - 0.00031 * Math.PI / 180 * T * T\n const Lp = lon - sexagesimal[\"default\"].angleFromDeg((1.397 + 0.00031 * T) * T);\n const [sLp, cLp] = base[\"default\"].sincos(Lp);\n // (32.3) p. 219\n const L5 = lon + sexagesimal[\"default\"].angleFromSec(-0.09033 + 0.03916 * (cLp + sLp) * Math.tan(lat));\n const B5 = lat + sexagesimal[\"default\"].angleFromSec(0.03916 * (cLp - sLp));\n return new base[\"default\"].Coord(L5, B5)\n}\n\nvar planetposition = {\n Planet,\n toFK5\n};\n\nexports.Planet = Planet;\nexports[\"default\"] = planetposition;\nexports.toFK5 = toFK5;\n", "'use strict';\n\nObject.defineProperty(exports, '__esModule', { value: true });\n\nvar base = require('./base.cjs');\nvar nutation = require('./nutation.cjs');\nvar solar = require('./solar.cjs');\n\n/**\n * @copyright 2013 Sonia Keys\n * @copyright 2016 commenthol\n * @license MIT\n * @module solarxyz\n */\n\n/**\n * Position returns rectangular coordinates referenced to the mean equinox of date.\n * @param {planetposition.Planet} earth - VSOP87Planet Earth\n * @param {Number} jde - Julian ephemeris day\n * @return {object} rectangular coordinates\n * {Number} x\n * {Number} y\n * {Number} z\n */\nfunction position (earth, jde) { // (e *pp.V87Planet, jde float64) (x, y, z float64)\n // (26.1) p. 171\n const { lon, lat, range } = solar[\"default\"].trueVSOP87(earth, jde);\n const [s\u03B5, c\u03B5] = base[\"default\"].sincos(nutation[\"default\"].meanObliquity(jde));\n const [ss, cs] = base[\"default\"].sincos(lon);\n const s\u03B2 = Math.sin(lat);\n const x = range * cs;\n const y = range * (ss * c\u03B5 - s\u03B2 * s\u03B5);\n const z = range * (ss * s\u03B5 + s\u03B2 * c\u03B5);\n return { x, y, z }\n}\n\n/**\n * LongitudeJ2000 returns geometric longitude referenced to equinox J2000.\n * @param {planetposition.Planet} earth - VSOP87Planet Earth\n * @param {Number} jde - Julian ephemeris day\n * @return {Number} geometric longitude referenced to equinox J2000.\n */\nfunction longitudeJ2000 (earth, jde) {\n const lon = earth.position2000(jde).lon;\n return base[\"default\"].pmod(lon + Math.PI - 0.09033 / 3600 * Math.PI / 180, 2 * Math.PI)\n}\n\n/**\n * PositionJ2000 returns rectangular coordinates referenced to equinox J2000.\n * @param {planetposition.Planet} earth - VSOP87Planet Earth\n * @param {Number} jde - Julian ephemeris day\n * @return {object} rectangular coordinates\n * {Number} x\n * {Number} y\n * {Number} z\n */\nfunction positionJ2000 (earth, jde) {\n const { x, y, z } = xyz(earth, jde);\n // (26.3) p. 174\n return {\n x: x + 0.00000044036 * y - 0.000000190919 * z,\n y: -0.000000479966 * x + 0.917482137087 * y - 0.397776982902 * z,\n z: 0.397776982902 * y + 0.917482137087 * z\n }\n}\n\nfunction xyz (earth, jde) {\n const { lon, lat, range } = earth.position2000(jde);\n const s = lon + Math.PI;\n const \u03B2 = -lat;\n const [ss, cs] = base[\"default\"].sincos(s);\n const [s\u03B2, c\u03B2] = base[\"default\"].sincos(\u03B2);\n // (26.2) p. 172\n const x = range * c\u03B2 * cs;\n const y = range * c\u03B2 * ss;\n const z = range * s\u03B2;\n return { x, y, z }\n}\n\n/**\n * PositionB1950 returns rectangular coordinates referenced to B1950.\n *\n * Results are referenced to the mean equator and equinox of the epoch B1950\n * in the FK5 system, not FK4.\n *\n * @param {planetposition.Planet} earth - VSOP87Planet Earth\n * @param {Number} jde - Julian ephemeris day\n * @return {object} rectangular coordinates\n * {Number} x\n * {Number} y\n * {Number} z\n */\nfunction positionB1950 (earth, jde) { // (e *pp.V87Planet, jde float64) (x, y, z float64)\n const { x, y, z } = xyz(earth, jde);\n return {\n x: 0.999925702634 * x + 0.012189716217 * y + 0.000011134016 * z,\n y: -0.011179418036 * x + 0.917413998946 * y - 0.397777041885 * z,\n z: -0.004859003787 * x + 0.397747363646 * y + 0.917482111428 * z\n }\n}\n\nconst \u03B6t = [2306.2181, 0.30188, 0.017998];\nconst zt = [2306.2181, 1.09468, 0.018203];\nconst \u03B8t = [2004.3109, -0.42665, -0.041833];\n\n/**\n * PositionEquinox returns rectangular coordinates referenced to an arbitrary epoch.\n *\n * Position will be computed for given Julian day \"jde\" but referenced to mean\n * equinox \"epoch\" (year).\n *\n * @param {planetposition.Planet} earth - VSOP87Planet Earth\n * @param {Number} jde - Julian ephemeris day\n * @param {Number} epoch\n * @return {object} rectangular coordinates\n * {Number} x\n * {Number} y\n * {Number} z\n */\nfunction positionEquinox (earth, jde, epoch) {\n const xyz = positionJ2000(earth, jde);\n const x0 = xyz.x;\n const y0 = xyz.y;\n const z0 = xyz.z;\n const t = (epoch - 2000) * 0.01;\n const \u03B6 = base[\"default\"].horner(t, \u03B6t) * t * Math.PI / 180 / 3600;\n const z = base[\"default\"].horner(t, zt) * t * Math.PI / 180 / 3600;\n const \u03B8 = base[\"default\"].horner(t, \u03B8t) * t * Math.PI / 180 / 3600;\n const [s\u03B6, c\u03B6] = base[\"default\"].sincos(\u03B6);\n const [sz, cz] = base[\"default\"].sincos(z);\n const [s\u03B8, c\u03B8] = base[\"default\"].sincos(\u03B8);\n const xx = c\u03B6 * cz * c\u03B8 - s\u03B6 * sz;\n const xy = s\u03B6 * cz + c\u03B6 * sz * c\u03B8;\n const xz = c\u03B6 * s\u03B8;\n const yx = -c\u03B6 * sz - s\u03B6 * cz * c\u03B8;\n const yy = c\u03B6 * cz - s\u03B6 * sz * c\u03B8;\n const yz = -s\u03B6 * s\u03B8;\n const zx = -cz * s\u03B8;\n const zy = -sz * s\u03B8;\n const zz = c\u03B8;\n return {\n x: xx * x0 + yx * y0 + zx * z0,\n y: xy * x0 + yy * y0 + zy * z0,\n z: xz * x0 + yz * y0 + zz * z0\n }\n}\n\nvar solarxyz = {\n position,\n longitudeJ2000,\n positionJ2000,\n xyz,\n positionB1950,\n positionEquinox\n};\n\nexports[\"default\"] = solarxyz;\nexports.longitudeJ2000 = longitudeJ2000;\nexports.position = position;\nexports.positionB1950 = positionB1950;\nexports.positionEquinox = positionEquinox;\nexports.positionJ2000 = positionJ2000;\nexports.xyz = xyz;\n", "'use strict';\n\nObject.defineProperty(exports, '__esModule', { value: true });\n\nvar apparent = require('./apparent.cjs');\nvar base = require('./base.cjs');\nvar coord = require('./coord.cjs');\nvar kepler = require('./kepler.cjs');\nvar nutation = require('./nutation.cjs');\nvar planetposition = require('./planetposition.cjs');\nvar solarxyz = require('./solarxyz.cjs');\n\n/**\n * @copyright 2013 Sonia Keys\n * @copyright 2016 commenthol\n * @license MIT\n * @module elliptic\n */\n\n/**\n * Position returns observed equatorial coordinates of a planet at a given time.\n *\n * Argument p must be a valid V87Planet object for the observed planet.\n * Argument earth must be a valid V87Planet object for Earth.\n *\n * Results are right ascension and declination, \u03B1 and \u03B4 in radians.\n */\nfunction position (planet, earth, jde) { // (p, earth *pp.V87Planet, jde float64) (\u03B1, \u03B4 float64)\n let x = 0;\n let y = 0;\n let z = 0;\n const posEarth = earth.position(jde);\n const [L0, B0, R0] = [posEarth.lon, posEarth.lat, posEarth.range];\n const [sB0, cB0] = base[\"default\"].sincos(B0);\n const [sL0, cL0] = base[\"default\"].sincos(L0);\n\n function pos (\u03C4 = 0) {\n const pos = planet.position(jde - \u03C4);\n const [L, B, R] = [pos.lon, pos.lat, pos.range];\n const [sB, cB] = base[\"default\"].sincos(B);\n const [sL, cL] = base[\"default\"].sincos(L);\n x = R * cB * cL - R0 * cB0 * cL0;\n y = R * cB * sL - R0 * cB0 * sL0;\n z = R * sB - R0 * sB0;\n }\n\n pos();\n const \u0394 = Math.sqrt(x * x + y * y + z * z); // (33.4) p. 224\n const \u03C4 = base[\"default\"].lightTime(\u0394);\n // repeating with jde-\u03C4\n pos(\u03C4);\n\n let \u03BB = Math.atan2(y, x); // (33.1) p. 223\n let \u03B2 = Math.atan2(z, Math.hypot(x, y)); // (33.2) p. 223\n const [\u0394\u03BB, \u0394\u03B2] = apparent[\"default\"].eclipticAberration(\u03BB, \u03B2, jde);\n const fk5 = planetposition[\"default\"].toFK5(\u03BB + \u0394\u03BB, \u03B2 + \u0394\u03B2, jde);\n \u03BB = fk5.lon;\n \u03B2 = fk5.lat;\n const [\u0394\u03C8, \u0394\u03B5] = nutation[\"default\"].nutation(jde);\n \u03BB += \u0394\u03C8;\n const \u03B5 = nutation[\"default\"].meanObliquity(jde) + \u0394\u03B5;\n return new coord[\"default\"].Ecliptic(\u03BB, \u03B2).toEquatorial(\u03B5)\n // Meeus gives a formula for elongation but doesn't spell out how to\n // obtaion term \u03BB0 and doesn't give an example solution.\n}\n\n/**\n * Elements holds keplerian elements.\n */\nclass Elements {\n /*\n Axis float64 // Semimajor axis, a, in AU\n Ecc float64 // Eccentricity, e\n Inc float64 // Inclination, i, in radians\n ArgP float64 // Argument of perihelion, \u03C9, in radians\n Node float64 // Longitude of ascending node, \u03A9, in radians\n TimeP float64 // Time of perihelion, T, as jde\n */\n constructor (axis, ecc, inc, argP, node, timeP) {\n let o = {};\n if (typeof axis === 'object') {\n o = axis;\n }\n this.axis = o.axis || axis;\n this.ecc = o.ecc || ecc;\n this.inc = o.inc || inc;\n this.argP = o.argP || argP;\n this.node = o.node || node;\n this.timeP = o.timeP || timeP;\n }\n\n /**\n * Position returns observed equatorial coordinates of a body with Keplerian elements.\n *\n * Argument e must be a valid V87Planet object for Earth.\n *\n * Results are right ascension and declination \u03B1 and \u03B4, and elongation \u03C8,\n * all in radians.\n */\n position (jde, earth) { // (\u03B1, \u03B4, \u03C8 float64) {\n // (33.6) p. 227\n const n = base[\"default\"].K / this.axis / Math.sqrt(this.axis);\n const s\u03B5 = base[\"default\"].SOblJ2000;\n const c\u03B5 = base[\"default\"].COblJ2000;\n const [s\u03A9, c\u03A9] = base[\"default\"].sincos(this.node);\n const [si, ci] = base[\"default\"].sincos(this.inc);\n // (33.7) p. 228\n const F = c\u03A9;\n const G = s\u03A9 * c\u03B5;\n const H = s\u03A9 * s\u03B5;\n const P = -s\u03A9 * ci;\n const Q = c\u03A9 * ci * c\u03B5 - si * s\u03B5;\n const R = c\u03A9 * ci * s\u03B5 + si * c\u03B5;\n // (33.8) p. 229\n const A = Math.atan2(F, P);\n const B = Math.atan2(G, Q);\n const C = Math.atan2(H, R);\n const a = Math.hypot(F, P);\n const b = Math.hypot(G, Q);\n const c = Math.hypot(H, R);\n\n const f = (jde) => { // (x, y, z float64) {\n const M = n * (jde - this.timeP);\n let E;\n try {\n E = kepler[\"default\"].kepler2b(this.ecc, M, 15);\n } catch (e) {\n E = kepler[\"default\"].kepler3(this.ecc, M);\n }\n const \u03BD = kepler[\"default\"].trueAnomaly(E, this.ecc);\n const r = kepler[\"default\"].radius(E, this.ecc, this.axis);\n // (33.9) p. 229\n const x = r * a * Math.sin(A + this.argP + \u03BD);\n const y = r * b * Math.sin(B + this.argP + \u03BD);\n const z = r * c * Math.sin(C + this.argP + \u03BD);\n return { x, y, z }\n };\n return astrometricJ2000(f, jde, earth)\n }\n}\n\n/**\n * AstrometricJ2000 is a utility function for computing astrometric coordinates.\n *\n * It is used internally and only exported so that it can be used from\n * multiple packages. It is not otherwise expected to be used.\n *\n * Argument f is a function that returns J2000 equatorial rectangular\n * coodinates of a body.\n *\n * Results are J2000 right ascention, declination, and elongation.\n */\nfunction astrometricJ2000 (f, jde, earth) { // (f func(float64) (x, y, z float64), jde float64, e *pp.V87Planet) (\u03B1, \u03B4, \u03C8 float64)\n const sol = solarxyz[\"default\"].positionJ2000(earth, jde);\n const [X, Y, Z] = [sol.x, sol.y, sol.z];\n let \u03BE = 0;\n let \u03B7 = 0;\n let \u03B6 = 0;\n let \u0394 = 0;\n\n function fn (\u03C4 = 0) {\n // (33.10) p. 229\n const { x, y, z } = f(jde - \u03C4);\n \u03BE = X + x;\n \u03B7 = Y + y;\n \u03B6 = Z + z;\n \u0394 = Math.sqrt(\u03BE * \u03BE + \u03B7 * \u03B7 + \u03B6 * \u03B6);\n }\n\n fn();\n const \u03C4 = base[\"default\"].lightTime(\u0394);\n fn(\u03C4);\n\n let \u03B1 = Math.atan2(\u03B7, \u03BE);\n if (\u03B1 < 0) {\n \u03B1 += 2 * Math.PI;\n }\n const \u03B4 = Math.asin(\u03B6 / \u0394);\n const R0 = Math.sqrt(X * X + Y * Y + Z * Z);\n const \u03C8 = Math.acos((\u03BE * X + \u03B7 * Y + \u03B6 * Z) / R0 / \u0394);\n return new base[\"default\"].Coord(\u03B1, \u03B4, undefined, \u03C8)\n}\n\n/**\n * Velocity returns instantaneous velocity of a body in elliptical orbit around the Sun.\n *\n * Argument a is the semimajor axis of the body, r is the instaneous distance\n * to the Sun, both in AU.\n *\n * Result is in Km/sec.\n */\nfunction velocity (a, r) { // (a, r float64) float64\n return 42.1219 * Math.sqrt(1 / r - 0.5 / a)\n}\n\n/**\n * Velocity returns the velocity of a body at aphelion.\n *\n * Argument a is the semimajor axis of the body in AU, e is eccentricity.\n *\n * Result is in Km/sec.\n */\nfunction vAphelion (a, e) { // (a, e float64) float64\n return 29.7847 * Math.sqrt((1 - e) / (1 + e) / a)\n}\n\n/**\n * Velocity returns the velocity of a body at perihelion.\n *\n * Argument a is the semimajor axis of the body in AU, e is eccentricity.\n *\n * Result is in Km/sec.\n */\nfunction vPerihelion (a, e) { // (a, e float64) float64\n return 29.7847 * Math.sqrt((1 + e) / (1 - e) / a)\n}\n\n/**\n * Length1 returns Ramanujan's approximation for the length of an elliptical\n * orbit.\n *\n * Argument a is semimajor axis, e is eccentricity.\n *\n * Result is in units used for semimajor axis, typically AU.\n */\nfunction length1 (a, e) { // (a, e float64) float64\n const b = a * Math.sqrt(1 - e * e);\n return Math.PI * (3 * (a + b) - Math.sqrt((a + 3 * b) * (3 * a + b)))\n}\n\n/**\n * Length2 returns an alternate approximation for the length of an elliptical\n * orbit.\n *\n * Argument a is semimajor axis, e is eccentricity.\n *\n * Result is in units used for semimajor axis, typically AU.\n */\nfunction length2 (a, e) { // (a, e float64) float64\n const b = a * Math.sqrt(1 - e * e);\n const s = a + b;\n const p = a * b;\n const A = s * 0.5;\n const G = Math.sqrt(p);\n const H = 2 * p / s;\n return Math.PI * (21 * A - 2 * G - 3 * H) * 0.125\n}\n\n/**\n * Length3 returns the length of an elliptical orbit.\n *\n * Argument a is semimajor axis, e is eccentricity.\n *\n * Result is exact, and in units used for semimajor axis, typically AU.\n */\n/* As Meeus notes, Length4 converges faster. There is no reason to use\nthis function\nexport function length3 (a, e) { // (a, e float64) float64\n const sum0 = 1.0\n const e2 = e * e\n const term = e2 * 0.25\n const sum1 = 1.0 - term\n const nf = 1.0\n const df = 2.0\n while (sum1 !== sum0) {\n term *= nf\n nf += 2\n df += 2\n term *= nf * e2 / (df * df)\n sum0 = sum1\n sum1 -= term\n }\n return 2 * Math.PI * a * sum0\n} */\n\n/**\n * Length4 returns the length of an elliptical orbit.\n *\n * Argument a is semimajor axis, e is eccentricity.\n *\n * Result is exact, and in units used for semimajor axis, typically AU.\n */\nfunction length4 (a, e) { // (a, e float64) float64\n const b = a * Math.sqrt(1 - e * e);\n const m = (a - b) / (a + b);\n const m2 = m * m;\n let sum0 = 1.0;\n let term = m2 * 0.25;\n let sum1 = 1.0 + term;\n let nf = -1.0;\n let df = 2.0;\n while (sum1 !== sum0) {\n nf += 2;\n df += 2;\n term *= nf * nf * m2 / (df * df);\n sum0 = sum1;\n sum1 += term;\n }\n return 2 * Math.PI * a * sum0 / (1 + m)\n}\n\nvar elliptic = {\n position,\n Elements,\n astrometricJ2000,\n velocity,\n vAphelion,\n vPerihelion,\n length1,\n length2,\n // length3,\n length4\n};\n\nexports.Elements = Elements;\nexports.astrometricJ2000 = astrometricJ2000;\nexports[\"default\"] = elliptic;\nexports.length1 = length1;\nexports.length2 = length2;\nexports.length4 = length4;\nexports.position = position;\nexports.vAphelion = vAphelion;\nexports.vPerihelion = vPerihelion;\nexports.velocity = velocity;\n", "'use strict';\n\nObject.defineProperty(exports, '__esModule', { value: true });\n\nvar base = require('./base.cjs');\n\n/**\n * @copyright 2013 Sonia Keys\n * @copyright 2016 commenthol\n * @license MIT\n * @module moonphase\n */\n\nconst { sin, cos } = Math;\nconst ck = 1 / 1236.85;\nconst D2R = Math.PI / 180;\n\n/**\n * mean synodial lunar month\n */\nconst meanLunarMonth = 29.530588861;\n\n// (49.1) p. 349\nfunction mean (T) {\n return base[\"default\"].horner(T, 2451550.09766, 29.530588861 / ck,\n 0.00015437, -0.00000015, 0.00000000073)\n}\n\n/** snap returns k at specified quarter q nearest year y. */\nfunction snap (y, q) {\n const k = (y - 2000) * 12.3685; // (49.2) p. 350\n return Math.floor(k - q + 0.5) + q\n}\n\n/**\n * MeanNew returns the jde of the mean New Moon nearest the given datthis.\n * The mean date is within 0.5 day of the true date of New Moon.\n *\n * @param {Number} year - decimal year\n * @returns {Number} jde\n */\nfunction meanNew (year) {\n return mean(snap(year, 0) * ck)\n}\n\n/**\n * MeanFirst returns the jde of the mean First Quarter Moon nearest the given datthis.\n * The mean date is within 0.5 day of the true date of First Quarter Moon.\n *\n * @param {Number} year - decimal year\n * @returns {Number} jde\n */\nfunction meanFirst (year) {\n return mean(snap(year, 0.25) * ck)\n}\n\n/**\n * MeanFull returns the jde of the mean Full Moon nearest the given datthis.\n * The mean date is within 0.5 day of the true date of Full Moon.\n *\n * @param {Number} year - decimal year\n * @returns {Number} jde\n */\nfunction meanFull (year) {\n return mean(snap(year, 0.5) * ck)\n}\n\n/**\n * MeanLast returns the jde of the mean Last Quarter Moon nearest the given datthis.\n * The mean date is within 0.5 day of the true date of Last Quarter Moon.\n *\n * @param {Number} year - decimal year\n * @returns {Number} jde\n */\nfunction meanLast (year) {\n return mean(snap(year, 0.75) * ck)\n}\n\n/**\n * New returns the jde of New Moon nearest the given date.\n *\n * @param {Number} year - decimal year\n * @returns {Number} jde\n */\nfunction newMoon (year) {\n const m = new Mp(year, 0);\n return mean(m.T) + m.nfc(nc) + m.a()\n}\n\n/**\n * First returns the jde of First Quarter Moon nearest the given datthis.\n *\n * @param {Number} year - decimal year\n * @returns {Number} jde\n */\nfunction first (year) {\n const m = new Mp(year, 0.25);\n return mean(m.T) + m.flc() + m.w() + m.a()\n}\n\n/**\n * Full returns the jde of Full Moon nearest the given datthis.\n *\n * @param {Number} year - decimal year\n * @returns {Number} jde\n */\nfunction full (year) {\n const m = new Mp(year, 0.5);\n return mean(m.T) + m.nfc(fc) + m.a()\n}\n\n/**\n * Last returns the jde of Last Quarter Moon nearest the given datthis.\n *\n * @param {Number} year - decimal year\n * @returns {Number} jde\n */\nfunction last (year) {\n const m = new Mp(year, 0.75);\n return mean(m.T) + m.flc() - m.w() + m.a()\n}\n\nclass Mp {\n constructor (y, q) {\n this.A = new Array(14);\n const k = this.k = snap(y, q);\n const T = this.T = this.k * ck; // (49.3) p. 350\n this.E = base[\"default\"].horner(T, 1, -0.002516, -0.0000074);\n this.M = base[\"default\"].horner(T, 2.5534 * D2R, 29.1053567 * D2R / ck,\n -0.0000014 * D2R, -0.00000011 * D2R);\n this.M_ = base[\"default\"].horner(T, 201.5643 * D2R, 385.81693528 * D2R / ck,\n 0.0107582 * D2R, 0.00001238 * D2R, -0.000000058 * D2R);\n this.F = base[\"default\"].horner(T, 160.7108 * D2R, 390.67050284 * D2R / ck,\n -0.0016118 * D2R, -0.00000227 * D2R, 0.000000011 * D2R);\n this.\u03A9 = base[\"default\"].horner(T, 124.7746 * D2R, -1.56375588 * D2R / ck,\n 0.0020672 * D2R, 0.00000215 * D2R);\n this.A[0] = 299.7 * D2R + 0.107408 * D2R * k - 0.009173 * T * T;\n this.A[1] = 251.88 * D2R + 0.016321 * D2R * k;\n this.A[2] = 251.83 * D2R + 26.651886 * D2R * k;\n this.A[3] = 349.42 * D2R + 36.412478 * D2R * k;\n this.A[4] = 84.66 * D2R + 18.206239 * D2R * k;\n this.A[5] = 141.74 * D2R + 53.303771 * D2R * k;\n this.A[6] = 207.17 * D2R + 2.453732 * D2R * k;\n this.A[7] = 154.84 * D2R + 7.30686 * D2R * k;\n this.A[8] = 34.52 * D2R + 27.261239 * D2R * k;\n this.A[9] = 207.19 * D2R + 0.121824 * D2R * k;\n this.A[10] = 291.34 * D2R + 1.844379 * D2R * k;\n this.A[11] = 161.72 * D2R + 24.198154 * D2R * k;\n this.A[12] = 239.56 * D2R + 25.513099 * D2R * k;\n this.A[13] = 331.55 * D2R + 3.592518 * D2R * k;\n }\n\n // new or full corrections\n nfc (c) {\n const { M, M_, E, F, \u03A9 } = this;\n return c[0] * sin(M_) +\n c[1] * sin(M) * E +\n c[2] * sin(2 * M_) +\n c[3] * sin(2 * F) +\n c[4] * sin(M_ - M) * E +\n c[5] * sin(M_ + M) * E +\n c[6] * sin(2 * M) * E * E +\n c[7] * sin(M_ - 2 * F) +\n c[8] * sin(M_ + 2 * F) +\n c[9] * sin(2 * M_ + M) * E +\n c[10] * sin(3 * M_) +\n c[11] * sin(M + 2 * F) * E +\n c[12] * sin(M - 2 * F) * E +\n c[13] * sin(2 * M_ - M) * E +\n c[14] * sin(\u03A9) +\n c[15] * sin(M_ + 2 * M) +\n c[16] * sin(2 * (M_ - F)) +\n c[17] * sin(3 * M) +\n c[18] * sin(M_ + M - 2 * F) +\n c[19] * sin(2 * (M_ + F)) +\n c[20] * sin(M_ + M + 2 * F) +\n c[21] * sin(M_ - M + 2 * F) +\n c[22] * sin(M_ - M - 2 * F) +\n c[23] * sin(3 * M_ + M) +\n c[24] * sin(4 * M_)\n }\n\n // first or last corrections\n flc () {\n const { M, M_, E, F, \u03A9 } = this;\n return -0.62801 * sin(M_) +\n 0.17172 * sin(M) * E +\n -0.01183 * sin(M_ + M) * E +\n 0.00862 * sin(2 * M_) +\n 0.00804 * sin(2 * F) +\n 0.00454 * sin(M_ - M) * E +\n 0.00204 * sin(2 * M) * E * E +\n -0.0018 * sin(M_ - 2 * F) +\n -0.0007 * sin(M_ + 2 * F) +\n -0.0004 * sin(3 * M_) +\n -0.00034 * sin(2 * M_ - M) * E +\n 0.00032 * sin(M + 2 * F) * E +\n 0.00032 * sin(M - 2 * F) * E +\n -0.00028 * sin(M_ + 2 * M) * E * E +\n 0.00027 * sin(2 * M_ + M) * E +\n -0.00017 * sin(\u03A9) +\n -0.00005 * sin(M_ - M - 2 * F) +\n 0.00004 * sin(2 * M_ + 2 * F) +\n -0.00004 * sin(M_ + M + 2 * F) +\n 0.00004 * sin(M_ - 2 * M) +\n 0.00003 * sin(M_ + M - 2 * F) +\n 0.00003 * sin(3 * M) +\n 0.00002 * sin(2 * M_ - 2 * F) +\n 0.00002 * sin(M_ - M + 2 * F) +\n -0.00002 * sin(3 * M_ + M)\n }\n\n w () {\n const { M, M_, E, F } = this;\n return 0.00306 -\n 0.00038 * E * cos(M) +\n 0.00026 * cos(M_) -\n 0.00002 * (cos(M_ - M) -\n cos(M_ + M) -\n cos(2 * F)\n )\n }\n\n // additional corrections\n a () {\n let a = 0;\n ac.forEach((c, i) => {\n a += c * sin(this.A[i]);\n });\n return a\n }\n}\n\n// new coefficients\nconst nc = [\n -0.4072, 0.17241, 0.01608, 0.01039, 0.00739,\n -0.00514, 0.00208, -0.00111, -0.00057, 0.00056,\n -0.00042, 0.00042, 0.00038, -0.00024, -0.00017,\n -0.00007, 0.00004, 0.00004, 0.00003, 0.00003,\n -0.00003, 0.00003, -0.00002, -0.00002, 0.00002\n];\n\n// full coefficients\nconst fc = [\n -0.40614, 0.17302, 0.01614, 0.01043, 0.00734,\n -0.00515, 0.00209, -0.00111, -0.00057, 0.00056,\n -0.00042, 0.00042, 0.00038, -0.00024, -0.00017,\n -0.00007, 0.00004, 0.00004, 0.00003, 0.00003,\n -0.00003, 0.00003, -0.00002, -0.00002, 0.00002\n];\n\n// additional corrections\nconst ac = [\n 0.000325, 0.000165, 0.000164, 0.000126, 0.00011,\n 0.000062, 0.00006, 0.000056, 0.000047, 0.000042,\n 0.000040, 0.000037, 0.000035, 0.000023\n];\n\nvar moonphase = {\n meanLunarMonth,\n meanNew,\n meanFirst,\n meanFull,\n meanLast,\n newMoon,\n new: newMoon, // BACKWARDS-COMPATIBILITY\n first,\n full,\n last\n};\n\nexports[\"default\"] = moonphase;\nexports.first = first;\nexports.full = full;\nexports.last = last;\nexports.meanFirst = meanFirst;\nexports.meanFull = meanFull;\nexports.meanLast = meanLast;\nexports.meanLunarMonth = meanLunarMonth;\nexports.meanNew = meanNew;\nexports.newMoon = newMoon;\n", "'use strict';\n\nObject.defineProperty(exports, '__esModule', { value: true });\n\nvar base = require('./base.cjs');\nvar moonphase = require('./moonphase.cjs');\n\n/**\n * @copyright 2013 Sonia Keys\n * @copyright 2016 commenthol\n * @license MIT\n * @module eclipse\n */\n\n/**\n * @private\n */\nconst g = function (k, jm, c1, c2) { // (k, jm, c1, c2 float64) (eclipse bool, jdeMax, \u03B3, u, M\u02B9 float64)\n const ck = 1 / 1236.85;\n const p = Math.PI / 180;\n const T = k * ck;\n const F = base[\"default\"].horner(T, 160.7108 * p, 390.67050284 * p / ck,\n -0.0016118 * p, -0.00000227 * p, 0.000000011 * p);\n if (Math.abs(Math.sin(F)) > 0.36) {\n return [false] // no eclipse\n }\n const eclipse = true;\n const E = base[\"default\"].horner(T, 1, -0.002516, -0.0000074);\n const M = base[\"default\"].horner(T, 2.5534 * p, 29.1053567 * p / ck,\n -0.0000014 * p, -0.00000011 * p);\n const M\u02B9 = base[\"default\"].horner(T, 201.5643 * p, 385.81693528 * p / ck,\n 0.0107582 * p, 0.00001238 * p, -0.000000058 * p);\n const \u03A9 = base[\"default\"].horner(T, 124.7746 * p, -1.56375588 * p / ck,\n 0.0020672 * p, 0.00000215 * p);\n const s\u03A9 = Math.sin(\u03A9);\n const F1 = F - 0.02665 * p * s\u03A9;\n const A1 = base[\"default\"].horner(T, 299.77 * p, 0.107408 * p / ck, -0.009173 * p);\n // (54.1) p. 380\n const jdeMax = jm +\n c1 * Math.sin(M\u02B9) +\n c2 * Math.sin(M) * E +\n 0.0161 * Math.sin(2 * M\u02B9) +\n -0.0097 * Math.sin(2 * F1) +\n 0.0073 * Math.sin(M\u02B9 - M) * E +\n -0.005 * Math.sin(M\u02B9 + M) * E +\n -0.0023 * Math.sin(M\u02B9 - 2 * F1) +\n 0.0021 * Math.sin(2 * M) * E +\n 0.0012 * Math.sin(M\u02B9 + 2 * F1) +\n 0.0006 * Math.sin(2 * M\u02B9 + M) * E +\n -0.0004 * Math.sin(3 * M\u02B9) +\n -0.0003 * Math.sin(M + 2 * F1) * E +\n 0.0003 * Math.sin(A1) +\n -0.0002 * Math.sin(M - 2 * F1) * E +\n -0.0002 * Math.sin(2 * M\u02B9 - M) * E +\n -0.0002 * s\u03A9;\n const P = 0.207 * Math.sin(M) * E +\n 0.0024 * Math.sin(2 * M) * E +\n -0.0392 * Math.sin(M\u02B9) +\n 0.0116 * Math.sin(2 * M\u02B9) +\n -0.0073 * Math.sin(M\u02B9 + M) * E +\n 0.0067 * Math.sin(M\u02B9 - M) * E +\n 0.0118 * Math.sin(2 * F1);\n const Q = 5.2207 +\n -0.0048 * Math.cos(M) * E +\n 0.002 * Math.cos(2 * M) * E +\n -0.3299 * Math.cos(M\u02B9) +\n -0.006 * Math.cos(M\u02B9 + M) * E +\n 0.0041 * Math.cos(M\u02B9 - M) * E;\n const [sF1, cF1] = base[\"default\"].sincos(F1);\n const W = Math.abs(cF1);\n const \u03B3 = (P * cF1 + Q * sF1) * (1 - 0.0048 * W);\n const u = 0.0059 +\n 0.0046 * Math.cos(M) * E +\n -0.0182 * Math.cos(M\u02B9) +\n 0.0004 * Math.cos(2 * M\u02B9) +\n -0.0005 * Math.cos(M + M\u02B9);\n return [eclipse, jdeMax, \u03B3, u, M\u02B9] // (eclipse bool, jdeMax, \u03B3, u, M\u02B9 float64)\n};\n\n/**\n * Eclipse type identifiers returned from Solar and Lunar.\n */\nconst TYPE = {\n None: 0,\n Partial: 1, // for solar eclipses\n Annular: 2, // solar\n AnnularTotal: 3, // solar\n Penumbral: 4, // for lunar eclipses\n Umbral: 5, // lunar\n Total: 6 // solar or lunar\n};\n\n/**\n * Snap returns k at specified quarter q nearest year y.\n * Cut and paste from moonphase. Time corresponding to k needed in these\n * algorithms but otherwise not meaningful enough to export from moonphase.\n */\nconst snap = function (y, q) { // (y, q float64) float64\n const k = (y - 2000) * 12.3685; // (49.2) p. 350\n return Math.floor(k - q + 0.5) + q\n};\n\n/**\n * Solar computes quantities related to solar eclipses.\n *\n * Argument year is a decimal year specifying a date.\n *\n * eclipseType will be None, Partial, Annular, AnnularTotal, or Total.\n * If None, none of the other return values may be meaningful.\n *\n * central is true if the center of the eclipse shadow touches the Earth.\n *\n * jdeMax is the jde when the center of the eclipse shadow is closest to the\n * Earth center, in a plane through the center of the Earth.\n *\n * \u03B3 is the distance from the eclipse shadow center to the Earth center\n * at time jdeMax.\n *\n * u is the radius of the Moon's umbral cone in the plane of the Earth.\n *\n * p is the radius of the penumbral cone.\n *\n * mag is eclipse magnitude for partial eclipses. It is not valid for other\n * eclipse types.\n *\n * \u03B3, u, and p are in units of equatorial Earth radii.\n */\nfunction solar (year) { // (year float64) (eclipseType int, central bool, jdeMax, \u03B3, u, p, mag float64)\n let eclipseType = TYPE.None;\n let mag;\n\n const [e, jdeMax, \u03B3, u, _] = g(snap(year, 0), moonphase[\"default\"].meanNew(year), -0.4075, 0.1721); // eslint-disable-line no-unused-vars\n\n const p = u + 0.5461;\n if (!e) {\n return { type: eclipseType } // no eclipse\n }\n const a\u03B3 = Math.abs(\u03B3);\n if (a\u03B3 > 1.5433 + u) {\n return { type: eclipseType } // no eclipse\n }\n const central = a\u03B3 < 0.9972; // eclipse center touches Earth\n\n if (!central) {\n eclipseType = TYPE.Partial; // most common case\n if (a\u03B3 < 1.026) { // umbral cone may touch earth\n if (a\u03B3 < 0.9972 + Math.abs(u)) { // total or annular\n eclipseType = TYPE.Total; // report total in both cases\n }\n }\n } else if (u < 0) {\n eclipseType = TYPE.Total;\n } else if (u > 0.0047) {\n eclipseType = TYPE.Annular;\n } else {\n const \u03C9 = 0.00464 * Math.sqrt(1 - \u03B3 * \u03B3);\n if (u < \u03C9) {\n eclipseType = TYPE.AnnularTotal;\n } else {\n eclipseType = TYPE.Annular;\n }\n }\n\n if (eclipseType === TYPE.Partial) {\n // (54.2) p. 382\n mag = (1.5433 + u - a\u03B3) / (0.5461 + 2 * u);\n }\n\n return {\n type: eclipseType,\n central,\n jdeMax,\n magnitude: mag,\n distance: \u03B3,\n umbral: u,\n penumbral: p\n }\n}\n\n/**\n * Lunar computes quantities related to lunar eclipses.\n *\n * Argument year is a decimal year specifying a date.\n *\n * eclipseType will be None, Penumbral, Umbral, or Total.\n * If None, none of the other return values may be meaningful.\n *\n * jdeMax is the jde when the center of the eclipse shadow is closest to the\n * Moon center, in a plane through the center of the Moon.\n *\n * \u03B3 is the distance from the eclipse shadow center to the moon center\n * at time jdeMax.\n *\n * \u03C3 is the radius of the umbral cone in the plane of the Moon.\n *\n * \u03C1 is the radius of the penumbral cone.\n *\n * mag is eclipse magnitude.\n *\n * sd- return values are semidurations of the phases of the eclipse, in days.\n *\n * \u03B3, \u03C3, and \u03C1 are in units of equatorial Earth radii.\n */\nfunction lunar (year) { // (year float64) (eclipseType int, jdeMax, \u03B3, \u03C1, \u03C3, mag, sdTotal, sdPartial, sdPenumbral float64)\n let eclipseType = TYPE.None;\n let mag;\n let sdTotal;\n let sdPartial;\n let sdPenumbral;\n\n const [e, jdeMax, \u03B3, u, M\u02B9] = g(snap(year, 0.5),\n moonphase[\"default\"].meanFull(year), -0.4065, 0.1727);\n if (!e) {\n return { type: eclipseType } // no eclipse\n }\n const \u03C1 = 1.2848 + u;\n const \u03C3 = 0.7403 - u;\n const a\u03B3 = Math.abs(\u03B3);\n mag = (1.0128 - u - a\u03B3) / 0.545; // (54.3) p. 382\n\n if (mag > 1) {\n eclipseType = TYPE.Total;\n } else if (mag > 0) {\n eclipseType = TYPE.Umbral;\n } else {\n mag = (1.5573 + u - a\u03B3) / 0.545; // (54.4) p. 382\n if (mag < 0) {\n return { type: eclipseType } // no eclipse\n }\n eclipseType = TYPE.Penumbral;\n }\n\n const p = 1.0128 - u;\n const t = 0.4678 - u;\n const n = 0.5458 + 0.04 * Math.cos(M\u02B9);\n const \u03B32 = \u03B3 * \u03B3;\n\n /* eslint-disable no-fallthrough */\n switch (eclipseType) {\n case TYPE.Total: {\n sdTotal = Math.sqrt(t * t - \u03B32) / n / 24;\n }\n case TYPE.Umbral: {\n sdPartial = Math.sqrt(p * p - \u03B32) / n / 24;\n }\n default: {\n const h = 1.5573 + u;\n sdPenumbral = Math.sqrt(h * h - \u03B32) / n / 24;\n }\n }\n /* eslint-enable */\n\n return {\n type: eclipseType,\n jdeMax,\n magnitude: mag,\n distance: \u03B3,\n umbral: \u03C3,\n penumbral: \u03C1,\n sdTotal,\n sdPartial,\n sdPenumbral\n }\n}\n\nvar eclipse = {\n TYPE,\n solar,\n lunar\n};\n\nexports.TYPE = TYPE;\nexports[\"default\"] = eclipse;\nexports.lunar = lunar;\nexports.solar = solar;\n", "'use strict';\n\nObject.defineProperty(exports, '__esModule', { value: true });\n\nvar base = require('./base.cjs');\n\n/**\n * @copyright 2020 mdmunir\n * @copyright 2020 commenthol\n * @license MIT\n * @module elp\n */\n\nconst SEC2RAD = 1 / 3600 * Math.PI / 180;\n\nfunction sum (T, series) {\n const coeffs = [];\n Object.keys(series).forEach((x) => {\n coeffs[x] = 0.0;\n let y = series[x].length - 1;\n for (y; y >= 0; y--) {\n // A, t0, t1, t2, t3, t4\n const row = series[x][y];\n const \u03C6 = base[\"default\"].horner(T, row.slice(1));\n coeffs[x] += row[0] * Math.sin(\u03C6);\n }\n });\n return base[\"default\"].horner(T, ...coeffs)\n}\n\n/**\n *\n */\nclass Moon {\n /**\n * ELP representation of a Moon\n * @constructs Moon\n * @param {object} data - elp data series\n * @example\n * ```js\n * // for use in browser\n * import {data} from 'astronomia.js'\n * const moon = new elp.Moon(data.elpMppDe)\n * ```\n */\n constructor (data) {\n if (typeof data !== 'object') throw new TypeError('need Elp data')\n this.series = data;\n }\n\n _calcLBR (T) {\n const L = base[\"default\"].horner(T, this.series.W1) + sum(T, this.series.L) * SEC2RAD;\n const B = sum(T, this.series.B) * SEC2RAD;\n const R = sum(T, this.series.R);\n return { L: base[\"default\"].pmod(L, 2 * Math.PI), B, R }\n }\n\n /**\n * Position returns rectangular coordinates referred to the inertial mean ecliptic and equinox of J2000.\n * @param {Number} jde - Julian ephemeris day\n * @return {object} rectangular coordinates\n * {Number} x\n * {Number} y\n * {Number} z\n */\n positionXYZ (jde) {\n const T = base[\"default\"].J2000Century(jde);\n const { L, B, R } = this._calcLBR(T);\n\n const x = R * Math.cos(L) * Math.cos(B);\n const y = R * Math.sin(L) * Math.cos(B);\n const z = R * Math.sin(B);\n\n const P = base[\"default\"].horner(T, 0, 0.10180391e-4, 0.47020439e-6, -0.5417367e-9, -0.2507948e-11, 0.463486e-14);\n const Q = base[\"default\"].horner(T, 0, -0.113469002e-3, 0.12372674e-6, 0.12654170e-8, -0.1371808e-11, -0.320334e-14);\n const sq = Math.sqrt(1 - P * P - Q * Q);\n const p11 = 1 - 2 * P * P;\n const p12 = 2 * P * Q;\n const p13 = 2 * P * sq;\n const p21 = 2 * P * Q;\n const p22 = 1 - 2 * Q * Q;\n const p23 = -2 * Q * sq;\n const p31 = -2 * P * sq;\n const p32 = 2 * Q * sq;\n const p33 = 1 - 2 * P * P - 2 * Q * Q;\n\n const result = {\n x: p11 * x + p12 * y + p13 * z,\n y: p21 * x + p22 * y + p23 * z,\n z: p31 * x + p32 * y + p33 * z\n };\n return result\n }\n\n /**\n * Delay effect of light time\n *\n * @param {Number} jde - Julian ephemeris day\n * @returns {Number} Delay time in days\n */\n lightTime (jde) {\n const T = base[\"default\"].J2000Century(jde);\n const R = sum(T, this.series.R);\n return base[\"default\"].lightTime(R / base[\"default\"].AU)\n }\n\n /**\n * Position returns ecliptic position of moon at equinox and ecliptic of date.\n *\n * @param {Number} jde - the date for which positions are desired.\n * @returns {Coord} Results are positions consistent with those elp data,\n * that is, at equinox and ecliptic of date.\n * {Number} lon - geocentric longitude in radians.\n * {Number} lat - geocentric latitude in radians.\n * {Number} range - geocentric range in KM.\n */\n position (jde) {\n const T = base[\"default\"].J2000Century(jde);\n const { L, B, R } = this._calcLBR(T);\n\n // precession\n const pA = base[\"default\"].horner(T, 0, 5029.0966 - 0.29965, 1.1120, 0.000077, -0.00002353) * SEC2RAD;\n return new base.Coord(\n base[\"default\"].pmod(L + pA, 2 * Math.PI),\n B,\n R)\n }\n}\n\n/**\n * Position returns the true geometric position of the moon as ecliptic coordinates.\n *\n * Result computed by Elp theory. Result is at equator and equinox\n * of date in the FK5 frame. It does not include nutation or aberration.\n *\n * @param {Object} elpData\n * @param {Number} jde - Julian ephemeris day\n * @returns {Object}\n * {Number} lon - ecliptic longitude in radians\n * {Number} lat - ecliptic latitude in radians\n * {Number} range - range in KM\n */\nfunction position (elpData, jde) {\n const moon = new Moon(elpData);\n return moon.position(jde)\n}\n\nvar elp = {\n Moon,\n position\n};\n\nexports.Moon = Moon;\nexports[\"default\"] = elp;\nexports.position = position;\n", "'use strict';\n\nObject.defineProperty(exports, '__esModule', { value: true });\n\nvar base = require('./base.cjs');\nvar coord = require('./coord.cjs');\nvar nutation = require('./nutation.cjs');\nvar solar = require('./solar.cjs');\n\n/**\n * @copyright 2013 Sonia Keys\n * @copyright 2016 commenthol\n * @license MIT\n * @module eqtime\n */\nconst { cos, sin, tan } = Math;\n\n/**\n * e computes the \"equation of time\" for the given JDE.\n *\n * Parameter planet must be a planetposition.Planet object for Earth obtained\n * with `new planetposition.Planet('earth')`.\n *\n * @param {Number} jde - Julian ephemeris day\n * @param {planetposition.Planet} earth - VSOP87 planet\n * @returns {Number} equation of time as an hour angle in radians.\n */\nfunction e (jde, earth) {\n const \u03C4 = base[\"default\"].J2000Century(jde) * 0.1;\n const L0 = l0(\u03C4);\n // code duplicated from solar.ApparentEquatorialVSOP87 so that\n // we can keep \u0394\u03C8 and c\u03B5\n const { lon, lat, range } = solar[\"default\"].trueVSOP87(earth, jde);\n const [\u0394\u03C8, \u0394\u03B5] = nutation[\"default\"].nutation(jde);\n const a = -20.4898 / 3600 * Math.PI / 180 / range;\n const \u03BB = lon + \u0394\u03C8 + a;\n const \u03B5 = nutation[\"default\"].meanObliquity(jde) + \u0394\u03B5;\n const eq = new coord[\"default\"].Ecliptic(\u03BB, lat).toEquatorial(\u03B5);\n // (28.1) p. 183\n const E = L0 - 0.0057183 * Math.PI / 180 - eq.ra + \u0394\u03C8 * cos(\u03B5);\n return base[\"default\"].pmod(E + Math.PI, 2 * Math.PI) - Math.PI\n}\n\n/**\n * (28.2) p. 183\n */\nconst l0 = function (\u03C4) {\n return base[\"default\"].horner(\u03C4, 280.4664567, 360007.6982779, 0.03032028,\n 1.0 / 49931, -1.0 / 15300, -1.0 / 2000000) * Math.PI / 180\n};\n\n/**\n * eSmart computes the \"equation of time\" for the given JDE.\n *\n * Result is less accurate that e() but the function has the advantage\n * of not requiring the V87Planet object.\n *\n * @param {Number} jde - Julian ephemeris day\n * @returns {Number} equation of time as an hour angle in radians.\n */\nfunction eSmart (jde) {\n const \u03B5 = nutation[\"default\"].meanObliquity(jde);\n const t = tan(\u03B5 * 0.5);\n const y = t * t;\n const T = base[\"default\"].J2000Century(jde);\n const L0 = l0(T * 0.1);\n const e = solar[\"default\"].eccentricity(T);\n const M = solar[\"default\"].meanAnomaly(T);\n const [sin2L0, cos2L0] = base[\"default\"].sincos(2 * L0);\n const sinM = sin(M);\n // (28.3) p. 185\n return y * sin2L0 - 2 * e * sinM + 4 * e * y * sinM * cos2L0 -\n y * y * sin2L0 * cos2L0 - 1.25 * e * e * sin(2 * M)\n}\n\nvar eqtime = {\n e,\n eSmart\n};\n\nexports[\"default\"] = eqtime;\nexports.e = e;\nexports.eSmart = eSmart;\n", "'use strict';\n\nObject.defineProperty(exports, '__esModule', { value: true });\n\n/**\n * @copyright 2013 Sonia Keys\n * @copyright 2016 commenthol\n * @license MIT\n * @module fit\n */\n/**\n * Fit: Chapter 4, Curve Fitting.\n */\n\n/**\n * Linear fits a line to sample data.\n *\n * Argument p is a list of data points. Results a and b are coefficients\n * of the best fit line y = ax + b.\n */\nfunction linear (points) { // (p []struct{ X, Y float64 }) (a, b float64)\n let sx = 0;\n let sy = 0;\n let sx2 = 0;\n let sxy = 0;\n for (const p of points) {\n const x = p.x;\n const y = p.y;\n sx += x;\n sy += y;\n sx2 += x * x;\n sxy += x * y;\n }\n const n = points.length;\n const d = n * sx2 - sx * sx;\n // (4.2) p. 36\n const a = (n * sxy - sx * sy) / d;\n const b = (sy * sx2 - sx * sxy) / d;\n return [a, b]\n}\n\n/**\n * CorrelationCoefficient returns a correlation coefficient for sample data.\n */\nfunction correlationCoefficient (points) { // (p []struct{ X, Y float64 }) float64\n let sx = 0;\n let sy = 0;\n let sx2 = 0;\n let sy2 = 0;\n let sxy = 0;\n for (const p of points) {\n const x = p.x;\n const y = p.y;\n sx += x;\n sy += y;\n sx2 += x * x;\n sy2 += y * y;\n sxy += x * y;\n }\n const n = points.length;\n // (4.3) p. 38\n return (n * sxy - sx * sy) / (Math.sqrt(n * sx2 - sx * sx) * Math.sqrt(n * sy2 - sy * sy))\n}\n\n/**\n * Quadratic fits y = ax\u00B2 + bx + c to sample data.\n *\n * Argument p is a list of data points. Results a, b, and c are coefficients\n * of the best fit quadratic y = ax\u00B2 + bx + c.\n */\nfunction quadratic (points) {\n let P = 0;\n let Q = 0;\n let R = 0;\n let S = 0;\n let T = 0;\n let U = 0;\n let V = 0;\n for (const p of points) {\n const x = p.x;\n const y = p.y;\n const x2 = x * x;\n P += x;\n Q += x2;\n R += x * x2;\n S += x2 * x2;\n T += y;\n U += x * y;\n V += x2 * y;\n }\n const N = points.length;\n // (4.5) p. 43\n const D = N * Q * S + 2 * P * Q * R - Q * Q * Q - P * P * S - N * R * R;\n // (4.6) p. 43\n const a = (N * Q * V + P * R * T + P * Q * U - Q * Q * T - P * P * V - N * R * U) / D;\n const b = (N * S * U + P * Q * V + Q * R * T - Q * Q * U - P * S * T - N * R * V) / D;\n const c = (Q * S * T + Q * R * U + P * R * V - Q * Q * V - P * S * U - R * R * T) / D;\n return [a, b, c]\n}\n\n/**\n * Func3 implements multiple linear regression for a linear combination\n * of three functions.\n *\n * Given sample data and three functions in x, Func3 returns coefficients\n * a, b, and c fitting y = a\u0192\u2080(x) + b\u0192\u2081(x) + c\u0192\u2082(x) to sample data.\n */\nfunction func3 (points, f0, f1, f2) {\n let M = 0;\n let P = 0;\n let Q = 0;\n let R = 0;\n let S = 0;\n let T = 0;\n let U = 0;\n let V = 0;\n let W = 0;\n for (const p of points) {\n const x = p.x;\n const y = p.y;\n const y0 = f0(x);\n const y1 = f1(x);\n const y2 = f2(x);\n M += y0 * y0;\n P += y0 * y1;\n Q += y0 * y2;\n R += y1 * y1;\n S += y1 * y2;\n T += y2 * y2;\n U += y * y0;\n V += y * y1;\n W += y * y2;\n }\n // (4.7) p. 44\n const D = M * R * T + 2 * P * Q * S - M * S * S - R * Q * Q - T * P * P;\n const a = (U * (R * T - S * S) + V * (Q * S - P * T) + W * (P * S - Q * R)) / D;\n const b = (U * (S * Q - P * T) + V * (M * T - Q * Q) + W * (P * Q - M * S)) / D;\n const c = (U * (P * S - R * Q) + V * (P * Q - M * S) + W * (M * R - P * P)) / D;\n return [a, b, c]\n}\n\n/**\n * Func1 fits a linear multiple of a function to sample data.\n *\n * Given sample data and a function in x, Func1 returns coefficient\n * a fitting y = a\u0192(x).\n */\nfunction func1 (points, f) {\n let syf = 0;\n let sf2 = 0;\n // (4.8) p. 45\n for (const p of points) {\n const fx = f(p.x);\n const y = p.y;\n syf += y * fx;\n sf2 += fx * fx;\n }\n return syf / sf2\n}\n\nvar fit = {\n linear,\n correlationCoefficient,\n quadratic,\n func3,\n func1\n};\n\nexports.correlationCoefficient = correlationCoefficient;\nexports[\"default\"] = fit;\nexports.func1 = func1;\nexports.func3 = func3;\nexports.linear = linear;\nexports.quadratic = quadratic;\n", "'use strict';\n\nObject.defineProperty(exports, '__esModule', { value: true });\n\nvar base = require('./base.cjs');\n\n/**\n * @copyright 2013 Sonia Keys\n * @copyright 2016 commenthol\n * @license MIT\n * @module illum\n */\n\nconst { toDeg } = base[\"default\"];\nconst D2R = Math.PI / 180;\n\n/**\n * PhaseAngle computes the phase angle of a planet.\n *\n * Argument r is planet's distance to Sun, \u0394 its distance to Earth, and R\n * the distance from Sun to Earth. All distances in AU.\n *\n * Result in radians.\n */\nfunction phaseAngle (r, \u0394, R) { // (r, \u0394, R float64) float64\n return Math.acos((r * r + \u0394 * \u0394 - R * R) / (2 * r * \u0394))\n}\n\n/**\n * Fraction computes the illuminated fraction of the disk of a planet.\n *\n * Argument r is planet's distance to Sun, \u0394 its distance to Earth, and R\n * the distance from Sun to Earth. All distances in AU.\n */\nfunction fraction (r, \u0394, R) { // (r, \u0394, R float64) float64\n // (41.2) p. 283\n const s = r + \u0394;\n return (s * s - R * R) / (4 * r * \u0394)\n}\n\n/**\n * PhaseAngle2 computes the phase angle of a planet.\n *\n * Arguments L, B, R are heliocentric ecliptical coordinates of the planet.\n * L0, R0 are longitude and radius for Earth, \u0394 is distance from Earth to\n * the planet. All distances in AU, angles in radians.\n *\n * The phase angle result is in radians.\n */\nfunction phaseAngle2 (L, B, R, L0, R0, \u0394) { // (L, B, R, L0, R0, \u0394 float64) float64\n // (41.3) p. 283\n return Math.acos((R - R0 * Math.cos(B) * Math.cos(L - L0)) / \u0394)\n}\n\n/**\n * PhaseAngle3 computes the phase angle of a planet.\n *\n * Arguments L, B are heliocentric ecliptical longitude and latitude of the\n * planet. x, y, z are cartesian coordinates of the planet, \u0394 is distance\n * from Earth to the planet. All distances in AU, angles in radians.\n *\n * The phase angle result is in radians.\n */\nfunction phaseAngle3 (L, B, x, y, z, \u0394) { // (L, B, x, y, z, \u0394 float64) float64\n // (41.4) p. 283\n const [sL, cL] = base[\"default\"].sincos(L);\n const [sB, cB] = base[\"default\"].sincos(B);\n return Math.acos((x * cB * cL + y * cB * sL + z * sB) / \u0394)\n}\n\n/**\n * FractionVenus computes an approximation of the illumanted fraction of Venus.\n */\nfunction fractionVenus (jde) { // (jde float64) float64\n const T = base[\"default\"].J2000Century(jde);\n const V = (261.51 + 22518.443 * T) * D2R;\n const M = (177.53 + 35999.05 * T) * D2R;\n const N = (50.42 + 58517.811 * T) * D2R;\n const W = V + (1.91 * Math.sin(M) + 0.78 * Math.sin(N)) * D2R;\n const \u0394 = Math.sqrt(1.52321 + 1.44666 * Math.cos(W));\n const s = 0.72333 + \u0394;\n return (s * s - 1) / 2.89332 / \u0394\n}\n\n/**\n * Mercury computes the visual magnitude of Mercury.\n * Formula by G. M\u00FCller\n *\n * Argument r is the planet's distance from the Sun, \u0394 the distance from Earth,\n * and i the phase angle in radians.\n */\nfunction mercury (r, \u0394, i) { // (r, \u0394, i float64) float64\n const s = toDeg(i) - 50;\n return 1.16 + 5 * Math.log10(r * \u0394) + (0.02838 + 0.0001023 * s) * s\n}\n\n/**\n * Venus computes the visual magnitude of Venus.\n * Formula by G. M\u00FCller\n *\n * Argument r is the planet's distance from the Sun, \u0394 the distance from Earth,\n * and i the phase angle in radians.\n */\nfunction venus (r, \u0394, i) { // (r, \u0394, i float64) float64\n const iDeg = toDeg(i);\n return -4 + 5 * Math.log10(r * \u0394) + (0.01322 + 0.0000004247 * iDeg * iDeg) * iDeg\n}\n\n/**\n * Mars computes the visual magnitude of Mars.\n * Formula by G. M\u00FCller\n *\n * Argument r is the planet's distance from the Sun, \u0394 the distance from Earth,\n * and i the phase angle in radians.\n */\nfunction mars (r, \u0394, i) { // (r, \u0394, i float64) float64\n return -1.3 + 5 * Math.log10(r * \u0394) + 0.01486 * toDeg(i)\n}\n\n/**\n * Jupiter computes the visual magnitude of Jupiter.\n * Formula by G. M\u00FCller\n * Effect of phase not considered\n *\n * Argument r is the planet's distance from the Sun, \u0394 the distance from Earth.\n */\nfunction jupiter (r, \u0394) { // (r, \u0394 float64) float64\n return -8.93 + 5 * Math.log10(r * \u0394)\n}\n\n/**\n * Saturn computes the visual magnitude of Saturn.\n * Formula by G. M\u00FCller\n * Sun's altitude above the plane of the ring is not considered.\n *\n * Argument r is the planet's distance from the Sun, \u0394 the distance from Earth.\n * B is the Saturnicentric latitude of the Earth referred to the plane of\n * Saturn's ring.\n * \u0394U (in radians) is the difference between the Saturnicentric longitudes\n * of the Sun and the Earth, measured in the plane of the ring.\n * You can use saturndisk.Disk() to obtain B and \u0394U.\n */\nfunction saturn (r, \u0394, B, \u0394U) { // (r, \u0394, B, \u0394U float64) float64\n const s = Math.sin(Math.abs(B));\n return -8.68 + 5 * Math.log10(r * \u0394) + 0.044 * Math.abs(toDeg(\u0394U)) - 2.6 * s + 1.25 * s * s\n}\n\n/**\n * Uranus computes the visual magnitude of Uranus.\n * Formula by G. M\u00FCller\n *\n * Argument r is the planet's distance from the Sun, \u0394 the distance from Earth.\n */\nfunction uranus (r, \u0394) { // (r, \u0394 float64) float64\n return -6.85 + 5 * Math.log10(r * \u0394)\n}\n\n/**\n * Neptune computes the visual magnitude of Neptune.\n * Formulae by G. M\u00FCller\n *\n * Argument r is the planet's distance from the Sun, \u0394 the distance from Earth.\n */\nfunction neptune (r, \u0394) { // (r, \u0394 float64) float64\n return -7.05 + 5 * Math.log10(r * \u0394)\n}\n\n/**\n * Mercury84 computes the visual magnitude of Mercury.\n * The formula is that adopted in \"Astronomical Almanac\" in 1984.0\n *\n * Argument r is the planet's distance from the Sun, \u0394 the distance from Earth,\n * and i the phase angle in radians.\n */\nfunction mercury84 (r, \u0394, i) { // (r, \u0394, i float64) float64\n return base[\"default\"].horner(toDeg(i), -0.42 + 5 * Math.log10(r * \u0394),\n 0.038, -0.000273, 0.000002)\n}\n\n/**\n * Venus84 computes the visual magnitude of Venus.\n * The formula is that adopted in \"Astronomical Almanac\" in 1984.0\n *\n * Argument r is the planet's distance from the Sun, \u0394 the distance from Earth,\n * and i the phase angle in radians.\n */\nfunction venus84 (r, \u0394, i) { // (r, \u0394, i float64) float64\n return base[\"default\"].horner(toDeg(i), -4.4 + 5 * Math.log10(r * \u0394),\n 0.0009, 0.000239, -0.00000065)\n}\n\n/**\n * Mars84 computes the visual magnitude of Mars.\n * The formula is that adopted in \"Astronomical Almanac\" in 1984.0\n *\n * Argument r is the planet's distance from the Sun, \u0394 the distance from Earth,\n * and i the phase angle in radians.\n */\nfunction mars84 (r, \u0394, i) { // (r, \u0394, i float64) float64\n return -1.52 + 5 * Math.log10(r * \u0394) + 0.016 * toDeg(i)\n}\n\n/**\n * Jupiter84 computes the visual magnitude of Jupiter.\n * The formula is that adopted in \"Astronomical Almanac\" in 1984.0\n *\n * Argument r is the planet's distance from the Sun, \u0394 the distance from Earth,\n * and i the phase angle in radians.\n */\nfunction jupiter84 (r, \u0394, i) { // (r, \u0394, i float64) float64\n return -9.4 + 5 * Math.log10(r * \u0394) + 0.005 * toDeg(i)\n}\n\n/**\n * Saturn84 computes the visual magnitude of Saturn.\n * The formula is that adopted in \"Astronomical Almanac\" in 1984.0\n *\n * Argument r is the planet's distance from the Sun, \u0394 the distance from Earth.\n * B is the Saturnicentric latitude of the Earth referred to the plane of\n * Saturn's ring.\n * \u0394U (in radians) is the difference between the Saturnicentric longitudes\n * of the Sun and the Earth, measured in the plane of the ring.\n */\nfunction saturn84 (r, \u0394, B, \u0394U) { // (r, \u0394, B, \u0394U float64) float64\n const s = Math.sin(Math.abs(B));\n return -8.88 + 5 * Math.log10(r * \u0394) + 0.044 * Math.abs(toDeg(\u0394U)) - 2.6 * s + 1.25 * s * s\n}\n\n/**\n * Uranus84 computes the visual magnitude of Uranus.\n * The formula is that adopted in \"Astronomical Almanac\" in 1984.0\n *\n * Argument r is the planet's distance from the Sun, \u0394 the distance from Earth.\n */\nfunction uranus84 (r, \u0394) { // (r, \u0394 float64) float64\n return -7.19 + 5 * Math.log10(r * \u0394)\n}\n\n/**\n * Neptune84 computes the visual magnitude of Neptune.\n * The formula is that adopted in \"Astronomical Almanac\" in 1984.0\n *\n * Argument r is the planet's distance from the Sun, \u0394 the distance from Earth.\n */\nfunction neptune84 (r, \u0394) { // (r, \u0394 float64) float64\n return -6.87 + 5 * Math.log10(r * \u0394)\n}\n\n/**\n * Pluto84 computes the visual magnitude of Pluto.\n * The formula is that adopted in \"Astronomical Almanac\" in 1984.0\n *\n * Argument r is the planet's distance from the Sun, \u0394 the distance from Earth.\n */\nfunction pluto84 (r, \u0394) { // (r, \u0394 float64) float64\n return -1 + 5 * Math.log10(r * \u0394)\n}\n\nvar illum = {\n phaseAngle,\n fraction,\n phaseAngle2,\n phaseAngle3,\n fractionVenus,\n mercury,\n venus,\n mars,\n jupiter,\n saturn,\n uranus,\n neptune,\n mercury84,\n venus84,\n mars84,\n jupiter84,\n saturn84,\n uranus84,\n neptune84,\n pluto84\n};\n\nexports[\"default\"] = illum;\nexports.fraction = fraction;\nexports.fractionVenus = fractionVenus;\nexports.jupiter = jupiter;\nexports.jupiter84 = jupiter84;\nexports.mars = mars;\nexports.mars84 = mars84;\nexports.mercury = mercury;\nexports.mercury84 = mercury84;\nexports.neptune = neptune;\nexports.neptune84 = neptune84;\nexports.phaseAngle = phaseAngle;\nexports.phaseAngle2 = phaseAngle2;\nexports.phaseAngle3 = phaseAngle3;\nexports.pluto84 = pluto84;\nexports.saturn = saturn;\nexports.saturn84 = saturn84;\nexports.uranus = uranus;\nexports.uranus84 = uranus84;\nexports.venus = venus;\nexports.venus84 = venus84;\n", "'use strict';\n\nObject.defineProperty(exports, '__esModule', { value: true });\n\nvar base = require('./base.cjs');\nvar sexagesimal = require('./sexagesimal.cjs');\nvar deltat = require('./deltat.cjs');\n\n/**\n * @copyright 2013 Sonia Keys\n * @copyright 2016 commenthol\n * @license MIT\n * @module julian\n */\n\nconst int = Math.trunc;\n\n/** 1582-10-05 Julian Date is 1st Gregorian Date (1582-10-15) */\nconst GREGORIAN0JD = 2299160.5;\n\nconst DAYS_OF_YEAR = [0, 0, 31, 59, 90, 120, 151, 181, 212, 243, 273, 304, 334];\nconst SECS_OF_DAY = 86400; // 24 * 60 * 60\n\n/**\n * Base class for CalendarJulian and CalendarGregorian\n * Respects the start of the Gregorian Calendar at `GREGORIAN0JD`\n */\nclass Calendar {\n /**\n * @param {number|Date} [year] - If `Date` is given then year, month, day is taken from that. Shortcut to `new Calendar().fromDate(date)`\n * @param {number} [month]\n * @param {number} [day]\n */\n constructor (year, month = 1, day = 1) {\n if (year instanceof Date) {\n this.fromDate(year);\n } else {\n this.year = year;\n this.month = month;\n this.day = day;\n }\n }\n\n getDate () {\n return {\n year: this.year,\n month: this.month,\n day: Math.floor(this.day)\n }\n }\n\n getTime () {\n const t = new sexagesimal[\"default\"].Time(this.day * SECS_OF_DAY);\n const [neg, h, m, _s] = t.toHMS(); // eslint-disable-line no-unused-vars\n let [s, ms] = base[\"default\"].modf(_s);\n ms = Math.trunc(ms * 1000);\n return {\n hour: h % 24,\n minute: m,\n second: s,\n millisecond: ms\n }\n }\n\n toISOString () {\n const { year, month, day } = this.getDate();\n const { hour, minute, second, millisecond } = this.getTime();\n return `${pad(year, 4)}-${pad(month)}-${pad(day)}T` +\n `${pad(hour)}:${pad(minute)}:${pad(second)}.${pad(millisecond, 3)}Z`\n }\n\n isGregorian () {\n return isCalendarGregorian(this.year, this.month, this.day)\n }\n\n /**\n * Note: Take care for dates < GREGORIAN0JD as `date` is always within the\n * proleptic Gregorian Calender\n * @param {Date} date - proleptic Gregorian date\n */\n fromDate (date) {\n this.year = date.getUTCFullYear();\n this.month = date.getUTCMonth() + 1;\n const day = date.getUTCDate();\n const hour = date.getUTCHours();\n const minute = date.getUTCMinutes();\n const second = date.getUTCSeconds();\n const ms = date.getMilliseconds();\n this.day = day + (hour + ((minute + ((second + ms / 1000) / 60)) / 60)) / 24;\n return this\n }\n\n /**\n * Note: Take care for dates < GREGORIAN0JD as `date` is always within the\n * proleptic Gregorian Calender\n * @returns {Date} proleptic Gregorian date\n */\n toDate () {\n const [day, fhour] = base[\"default\"].modf(this.day);\n const [hour, fminute] = base[\"default\"].modf(fhour * 24);\n const [minute, fsecond] = base[\"default\"].modf(fminute * 60);\n const [second, fms] = base[\"default\"].modf(fsecond * 60);\n const date = new Date(Date.UTC(\n this.year, this.month - 1, day, hour, minute, second, Math.round(fms * 1000)\n ));\n date.setUTCFullYear(this.year);\n return date\n }\n\n /**\n * converts a calendar date to decimal year\n * @returns {number} decimal year\n */\n toYear () {\n const [d, f] = base[\"default\"].modf(this.day); // eslint-disable-line no-unused-vars\n const n = this.dayOfYear() - 1 + f;\n const days = this.isLeapYear() ? 366 : 365;\n const decYear = this.year + (n / days);\n return decYear\n }\n\n /**\n * converts a decimal year to a calendar date\n * @param {number} year - decimal year\n */\n fromYear (year) {\n const [y, f] = base[\"default\"].modf(year);\n this.year = y;\n const days = this.isLeapYear() ? 366 : 365;\n const dayOfYear = base[\"default\"].round(f * days, 5);\n let m = 12;\n while (m > 0 && DAYS_OF_YEAR[m] > dayOfYear) {\n m--;\n }\n this.month = m;\n this.day = 1 + dayOfYear - DAYS_OF_YEAR[this.month];\n return this\n }\n\n isLeapYear () {\n if (this.isGregorian()) {\n return LeapYearGregorian(this.year)\n } else {\n return LeapYearJulian(this.year)\n }\n }\n\n toJD () {\n return CalendarToJD(this.year, this.month, this.day, !this.isGregorian())\n }\n\n fromJD (jd) {\n const isJulian = !isJDCalendarGregorian(jd);\n const { year, month, day } = JDToCalendar(jd, isJulian);\n this.year = year;\n this.month = month;\n this.day = day;\n return this\n }\n\n fromJDE (jde) {\n this.fromJD(jde);\n const dT = deltat[\"default\"].deltaT(this.toYear()); // in seconds\n this.day -= dT / 86400;\n return this\n }\n\n toJDE () {\n const dT = deltat[\"default\"].deltaT(this.toYear()); // in seconds\n this.day += dT / 86400;\n return this.toJD()\n }\n\n /**\n * set date to midnight UTC\n */\n midnight () {\n this.day = Math.floor(this.day);\n return this\n }\n\n /**\n * set date to noon UTC\n */\n noon () {\n this.day = Math.floor(this.day) + 0.5;\n return this\n }\n\n /**\n * @param {Boolean} td - if `true` calendar instance is in TD; date gets converted to UT\n * true - `UT = TD - \u0394T`\n * false - `TD = UT + \u0394T`\n */\n deltaT (td) {\n const dT = deltat[\"default\"].deltaT(this.toYear()); // in seconds\n if (td) {\n this.day -= dT / 86400;\n } else {\n this.day += dT / 86400;\n }\n return this\n }\n\n dayOfWeek () {\n return DayOfWeek(this.toJD())\n }\n\n dayOfYear () {\n if (this.isGregorian()) {\n return DayOfYearGregorian(this.year, this.month, this.day)\n } else {\n return DayOfYearJulian(this.year, this.month, this.day)\n }\n }\n}\n\nclass CalendarJulian extends Calendar {\n toJD () {\n return CalendarJulianToJD(this.year, this.month, this.day)\n }\n\n fromJD (jd) {\n const { year, month, day } = JDToCalendarJulian(jd);\n this.year = year;\n this.month = month;\n this.day = day;\n return this\n }\n\n isLeapYear () {\n return LeapYearJulian(this.year)\n }\n\n dayOfYear () {\n return DayOfYearJulian(this.year, this.month, this.day)\n }\n\n /**\n * toGregorian converts a Julian calendar date to a year, month, and day\n * in the Gregorian calendar.\n * @returns {CalendarGregorian}\n */\n toGregorian () {\n const jd = this.toJD();\n return new CalendarGregorian().fromJD(jd)\n }\n}\n\nclass CalendarGregorian extends Calendar {\n toJD () {\n return CalendarGregorianToJD(this.year, this.month, this.day)\n }\n\n fromJD (jd) {\n const { year, month, day } = JDToCalendarGregorian(jd);\n this.year = year;\n this.month = month;\n this.day = day;\n return this\n }\n\n isLeapYear () {\n return LeapYearGregorian(this.year)\n }\n\n dayOfYear () {\n return DayOfYearGregorian(this.year, this.month, this.day)\n }\n\n /*\n * toJulian converts a Gregorian calendar date to a year, month, and day\n * in the Julian calendar.\n * @returns {CalendarJulian}\n */\n toJulian () {\n const jd = this.toJD();\n return new CalendarJulian().fromJD(jd)\n }\n}\n\n// -----------------------------------------------------------------------------\n\n/**\n * base conversion from calendar date to julian day\n */\nfunction CalendarToJD (y, m, d, isJulian) {\n let b = 0;\n if (m < 3) {\n y--;\n m += 12;\n }\n if (!isJulian) {\n const a = base[\"default\"].floorDiv(y, 100);\n b = 2 - a + base[\"default\"].floorDiv(a, 4);\n }\n // (7.1) p. 61\n const jd = (base[\"default\"].floorDiv(36525 * (int(y + 4716)), 100)) +\n (base[\"default\"].floorDiv(306 * (m + 1), 10) + b) + d - 1524.5;\n return jd\n}\n\n/**\n * CalendarGregorianToJD converts a Gregorian year, month, and day of month\n * to Julian day.\n *\n * Negative years are valid, back to JD 0. The result is not valid for\n * dates before JD 0.\n * @param {number} y - year (int)\n * @param {number} m - month (int)\n * @param {number} d - day (float)\n * @returns {number} jd - Julian day (float)\n */\nfunction CalendarGregorianToJD (y, m, d) {\n return CalendarToJD(y, m, d, false)\n}\n\n/**\n * CalendarJulianToJD converts a Julian year, month, and day of month to Julian day.\n *\n * Negative years are valid, back to JD 0. The result is not valid for\n * dates before JD 0.\n * @param {number} y - year (int)\n * @param {number} m - month (int)\n * @param {number} d - day (float)\n * @returns {number} jd - Julian day (float)\n */\nfunction CalendarJulianToJD (y, m, d) {\n return CalendarToJD(y, m, d, true)\n}\n\n/**\n * LeapYearJulian returns true if year y in the Julian calendar is a leap year.\n * @param {number} y - year (int)\n * @returns {boolean} true if leap year in Julian Calendar\n */\nfunction LeapYearJulian (y) {\n return y % 4 === 0\n}\n\n/**\n * LeapYearGregorian returns true if year y in the Gregorian calendar is a leap year.\n * @param {number} y - year (int)\n * @returns {boolean} true if leap year in Gregorian Calendar\n */\nfunction LeapYearGregorian (y) {\n return (y % 4 === 0 && y % 100 !== 0) || y % 400 === 0\n}\n\n/**\n * JDToCalendar returns the calendar date for the given jd.\n *\n * Note that this function returns a date in either the Julian or Gregorian\n * Calendar, as appropriate.\n * @param {number} jd - Julian day (float)\n * @param {boolean} isJulian - set true for Julian Calendar, otherwise Gregorian is used\n * @returns {object} `{ (int) year, (int) month, (float) day }`\n */\nfunction JDToCalendar (jd, isJulian) {\n const [z, f] = base[\"default\"].modf(jd + 0.5);\n let a = z;\n if (!isJulian) {\n const \u03B1 = base[\"default\"].floorDiv(z * 100 - 186721625, 3652425);\n a = z + 1 + \u03B1 - base[\"default\"].floorDiv(\u03B1, 4);\n }\n const b = a + 1524;\n const c = base[\"default\"].floorDiv(b * 100 - 12210, 36525);\n const d = base[\"default\"].floorDiv(36525 * c, 100);\n const e = int(base[\"default\"].floorDiv((b - d) * 1e4, 306001));\n // compute return values\n let year;\n let month;\n const day = (int(b - d) - base[\"default\"].floorDiv(306001 * e, 1e4)) + f;\n if (e === 14 || e === 15) {\n month = e - 13;\n } else {\n month = e - 1;\n }\n if (month < 3) {\n year = int(c) - 4715;\n } else {\n year = int(c) - 4716;\n }\n return { year, month, day }\n}\n\n/**\n * JDToCalendarGregorian returns the calendar date for the given jd in the Gregorian Calendar.\n *\n * @param {number} jd - Julian day (float)\n * @returns {object} `{ (int) year, (int) month, (float) day }`\n */\nfunction JDToCalendarGregorian (jd) {\n return JDToCalendar(jd, false)\n}\n\n/**\n * JDToCalendarJulian returns the calendar date for the given jd in the Julian Calendar.\n *\n * @param {number} jd - Julian day (float)\n * @returns {object} { (int) year, (int) month, (float) day }\n */\nfunction JDToCalendarJulian (jd) {\n return JDToCalendar(jd, true)\n}\n\n/**\n * isJDCalendarGregorian tests if Julian day `jd` falls into the Gregorian calendar\n * @param {number} jd - Julian day (float)\n * @returns {boolean} true for Gregorian, false for Julian calendar\n */\nfunction isJDCalendarGregorian (jd) {\n return (jd >= GREGORIAN0JD)\n}\n\n/**\n * isCalendarGregorian tests if date falls into the Gregorian calendar\n * @param {number} year - julian/gregorian year\n * @param {number} [month] - month of julian/gregorian year\n * @param {number} [day] - day of julian/gregorian year\n * @returns {boolean} true for Gregorian, false for Julian calendar\n */\nfunction isCalendarGregorian (year, month = 1, day = 1) {\n return (year > 1582 ||\n (year === 1582 && month > 10) ||\n (year === 1582 && month === 10 && day >= 15)\n )\n}\n\n/**\n * JDToDate converts a Julian day `jd` to a Date Object (Gregorian Calendar)\n *\n * Note: Javascript uses the the ISO-8601 calendar, which is a proleptic Gregorian\n * calendar, i.e. it acts as if this calendar was always in effect, even before\n * its year of introduction in 1582. Therefore dates between 1582-10-05 and\n * 1582-10-14 exists.\n *\n * @param {number} jd - Julian day (float)\n * @returns {Date}\n */\nfunction JDToDate (jd) {\n return new CalendarGregorian().fromJD(jd).toDate()\n}\n\n/**\n * DateToJD converts a proleptic Gregorian Date into a Julian day `jd`\n * @param {Date} date\n * @returns {number} jd - Julian day (float)\n */\nfunction DateToJD (date) {\n return new CalendarGregorian().fromDate(date).toJD()\n}\n\n/**\n * JDEToDate converts a Julian ephemeris day `jde` to a Date Object (Gregorian Calendar)\n * To obtain \"Universal Time\" (UT) from \"Dynamical Time\" (TD) the correction \u0394T (in seconds) gets applied\n * ```\n * UT = TD - \u0394T\n * ```\n * If your use case does not require such accuracy converting `jde` using `JDToDate` is fine.\n *\n * Note: Javascript uses the the ISO-8601 calendar, which is a proleptic Gregorian\n * calendar, i.e. it acts as if this calendar was always in effect, even before\n * its year of introduction in 1582. Therefore dates between 1582-10-05 and\n * 1582-10-14 exists.\n *\n * @param {number} jde - Julian ephemeris day\n * @returns {Date} Javascript Date Object\n */\nfunction JDEToDate (jde) {\n return new CalendarGregorian().fromJDE(jde).toDate()\n}\n\n/**\n * DateToJDE converts a Date Object (Gregorian Calendar) to a Julian ephemeris day `jde`\n * To obtain \"Dynamical Time\" (TD) from \"Universal Time\" (UT) the correction \u0394T (in seconds) gets applied\n * ```\n * TD = UT + \u0394T\n * ```\n * If your use case does not require such accuracy converting `Date` using `DateToJD` is fine.\n *\n * @param {Date} date - Javascript Date Object\n * @returns {number} jde - Julian ephemeris day (float)\n */\nfunction DateToJDE (date) {\n return new CalendarGregorian().fromDate(date).toJDE()\n}\n\n/**\n * converts Modified Julian Day `mjd` to Julian Day `jd`\n * @param {Number} mjd - Modified Julian Day\n * @returns {Number} jd - Julian Day\n */\nfunction MJDToJD (mjd) {\n return mjd + base[\"default\"].JMod\n}\n\n/**\n * converts Julian Day `jd` to Modified Julian Day `mjd`\n * The MJD sometimes appear when mentioning orbital elements of artificial satellites.\n * Contrary to JD the MJD begins at Greenwich mean midnight.\n * @param {Number} jd - Julian Day\n * @returns {Number} mjd - Modified Julian Day MJD\n */\nfunction JDToMJD (jd) {\n return jd - base[\"default\"].JMod\n}\n\n/**\n * DayOfWeek determines the day of the week for a given JD.\n *\n * The value returned is an integer in the range 0 to 6, where 0 represents\n * Sunday. This is the same convention followed in the time package of the\n * Javascript standard library.\n * @param {number} jd - Julian day (float)\n * @returns {number} (int) 0 == sunday; ...; 6 == saturday\n */\nfunction DayOfWeek (jd) {\n return int(jd + 1.5) % 7\n}\n\n/**\n * DayOfYearGregorian computes the day number within the year of the Gregorian\n * calendar.\n * @param {number} y - year (int)\n * @param {number} m - month (int)\n * @param {number} d - day (float)\n * @returns {number} day of year\n */\nfunction DayOfYearGregorian (y, m, d) {\n return DayOfYear(y, m, int(d), LeapYearGregorian(y))\n}\n\n/**\n * DayOfYearJulian computes the day number within the year of the Julian\n * calendar.\n * @param {number} y - year (int)\n * @param {number} m - month (int)\n * @param {number} d - day (float)\n * @returns {number} day of year\n */\nfunction DayOfYearJulian (y, m, d) {\n return DayOfYear(y, m, int(d), LeapYearJulian(y))\n}\n\n/**\n * DayOfYear computes the day number within the year.\n *\n * This form of the function is not specific to the Julian or Gregorian\n * calendar, but you must tell it whether the year is a leap year.\n * @param {number} y - year (int)\n * @param {number} m - month (int)\n * @param {number} d - day (float)\n * @param {boolean} leap - set `true` if `y` is leap year\n * @returns {number} day of year\n */\nfunction DayOfYear (y, m, d, leap) {\n let k = 0;\n if (leap && m > 1) {\n k = 1;\n }\n return k + DAYS_OF_YEAR[m] + int(d)\n}\n\n/**\n * DayOfYearToCalendar returns the calendar month and day for a given\n * day of year and leap year status.\n * @param {number} n - day of year (int)\n * @param {boolean} leap - set `true` if `y` is leap year\n * @returns {object} `{ (int) month, (float) day }`\n */\nfunction DayOfYearToCalendar (n, leap) {\n let month;\n let k = 0;\n if (leap) {\n k = 1;\n }\n for (month = 1; month <= 12; month++) {\n if (k + DAYS_OF_YEAR[month] > n) {\n month = month - 1;\n break\n }\n }\n const day = n - k - DAYS_OF_YEAR[month];\n return { month, day }\n}\n\n/**\n * DayOfYearToCalendarGregorian returns the calendar month and day for a given\n * day of year.\n * @param {number} year\n * @param {number} n - day of year (int)\n * @returns {CalendarGregorian} { (int) year, (int) month, (float) day }\n */\nfunction DayOfYearToCalendarGregorian (year, n) {\n const { month, day } = DayOfYearToCalendar(n, LeapYearGregorian(year));\n return new CalendarGregorian(year, month, day)\n}\n\n/**\n * DayOfYearToCalendarJulian returns the calendar month and day for a given\n * day of year.\n * @param {number} year\n * @param {number} n - day of year (int)\n * @returns {CalendarJulian} { (int) year, (int) month, (float) day }\n */\nfunction DayOfYearToCalendarJulian (year, n) {\n const { month, day } = DayOfYearToCalendar(n, LeapYearJulian(year));\n return new CalendarJulian(year, month, day)\n}\n\nfunction pad (num, len) {\n len = len || 2;\n const neg = num < 0 ? '-' : '';\n num = Math.abs(num);\n const padded = ('0000' + num);\n return neg + padded.substr(padded.length - len, len)\n}\n\nvar julian = {\n GREGORIAN0JD,\n Calendar,\n CalendarJulian,\n CalendarGregorian,\n CalendarToJD,\n CalendarGregorianToJD,\n CalendarJulianToJD,\n LeapYearJulian,\n LeapYearGregorian,\n JDToCalendar,\n JDToCalendarGregorian,\n JDToCalendarJulian,\n isJDCalendarGregorian,\n isCalendarGregorian,\n JDToDate,\n DateToJD,\n JDEToDate,\n DateToJDE,\n MJDToJD,\n JDToMJD,\n DayOfWeek,\n DayOfYearGregorian,\n DayOfYearJulian,\n DayOfYear,\n DayOfYearToCalendar,\n DayOfYearToCalendarGregorian,\n DayOfYearToCalendarJulian\n};\n\nexports.Calendar = Calendar;\nexports.CalendarGregorian = CalendarGregorian;\nexports.CalendarGregorianToJD = CalendarGregorianToJD;\nexports.CalendarJulian = CalendarJulian;\nexports.CalendarJulianToJD = CalendarJulianToJD;\nexports.CalendarToJD = CalendarToJD;\nexports.DateToJD = DateToJD;\nexports.DateToJDE = DateToJDE;\nexports.DayOfWeek = DayOfWeek;\nexports.DayOfYear = DayOfYear;\nexports.DayOfYearGregorian = DayOfYearGregorian;\nexports.DayOfYearJulian = DayOfYearJulian;\nexports.DayOfYearToCalendar = DayOfYearToCalendar;\nexports.DayOfYearToCalendarGregorian = DayOfYearToCalendarGregorian;\nexports.DayOfYearToCalendarJulian = DayOfYearToCalendarJulian;\nexports.GREGORIAN0JD = GREGORIAN0JD;\nexports.JDEToDate = JDEToDate;\nexports.JDToCalendar = JDToCalendar;\nexports.JDToCalendarGregorian = JDToCalendarGregorian;\nexports.JDToCalendarJulian = JDToCalendarJulian;\nexports.JDToDate = JDToDate;\nexports.JDToMJD = JDToMJD;\nexports.LeapYearGregorian = LeapYearGregorian;\nexports.LeapYearJulian = LeapYearJulian;\nexports.MJDToJD = MJDToJD;\nexports[\"default\"] = julian;\nexports.isCalendarGregorian = isCalendarGregorian;\nexports.isJDCalendarGregorian = isJDCalendarGregorian;\n", "'use strict';\n\nObject.defineProperty(exports, '__esModule', { value: true });\n\nvar base = require('./base.cjs');\nvar julian = require('./julian.cjs');\n\n/**\n * @copyright 2013 Sonia Keys\n * @copyright 2016 commenthol\n * @license MIT\n * @module jm\n */\n\nconst int = Math.trunc;\n\n/**\n * JewishCalendar returns interesting dates and facts about a given year.\n *\n * Input is a Julian or Gregorian year.\n *\n * Outputs:\n * A: (int) Year number in the Jewish Calendar\n * mP: (int) Month number of Pesach.\n * dP: (int) Day number of Pesach.\n * mNY: (int) Month number of the Jewish new year.\n * dNY: (int) Day number of the Jewish new year.\n * months: (int) Number of months in this year.\n * days: (int) Number of days in this year.\n */\nfunction JewishCalendar (y) {\n const A = y + 3760;\n const D = bigD(y);\n let mP = 3;\n let dP = D;\n if (dP > 31) {\n mP++;\n dP -= 31;\n }\n // A simplification of Meeus's rule to add 163 days. Months of Pesach\n // are either March or April with D based off of March. Months of New\n // year are either September or August so D+163-(days from March to\n // September == 184) = D-21 must be based off of September.\n let mNY = 9;\n let dNY = D - 21;\n if (dNY > 30) {\n mNY++;\n dNY -= 30;\n }\n let months = 12;\n switch (A % 19) {\n case 0:\n case 3:\n case 6:\n case 8:\n case 11:\n case 14:\n case 17:\n months++;\n break\n }\n // Similarly, A simplification of Meeus's rule to take the difference\n // in calendar days from NY of one year to NY of the next. NY is based\n // on D, so difference in D is difference in day numbers of year. Result\n // is sum of this number and the number of days in the Western calandar\n // year.\n const y1 = y + 1;\n let lf = julian[\"default\"].LeapYearGregorian;\n if (y1 < 1583) {\n lf = julian[\"default\"].LeapYearJulian;\n }\n let days = 365;\n if (lf(y1)) {\n days++;\n }\n days += bigD(y1) - D;\n return [A, mP, dP, mNY, dNY, months, days]\n}\n\nconst bigD = function (y) { // (y int) int\n const C = base[\"default\"].floorDiv(y, 100);\n // const S int\n let S = 0;\n if (y >= 1583) {\n S = int(base[\"default\"].floorDiv(3 * C - 5, 4));\n }\n const a = (12 * y + 12) % 19;\n const b = y % 4;\n const Q = -1.904412361576 + 1.554241796621 * (a) + 0.25 * (b) -\n 0.003177794022 * (y) + (S);\n const fq = Math.floor(Q);\n const iq = int(fq);\n const j = (iq + 3 * y + 5 * b + 2 - S) % 7;\n const r = Q - fq;\n // const D int\n let D;\n if (j === 2 || j === 4 || j === 6) {\n D = iq + 23;\n } else if (j === 1 && a > 6 && r >= 0.63287037) {\n D = iq + 24;\n } else if (j === 0 && a > 11 && r >= 0.897723765) {\n D = iq + 23;\n } else {\n D = iq + 22;\n }\n return int(D)\n};\n\n/**\n * MoslemToJD converts a Moslem calendar date to a Julian Day.\n * @param {Number} y - year in moslem calendar\n * @param {Number} m - month\n * @param {Number} d - day\n * @returns {Number} jd - Julian day\n */\nfunction MoslemToJD (y, m, d) { // (y, m, d int) (jY, jDN int)\n const N = d + base[\"default\"].floorDiv(295001 * (m - 1) + 9900, 10000);\n const Q = base[\"default\"].floorDiv(y, 30);\n const R = y % 30;\n const A = base[\"default\"].floorDiv(11 * R + 3, 30);\n const W = 404 * Q + 354 * R + 208 + A;\n const Q1 = base[\"default\"].floorDiv(W, 1461);\n const Q2 = W % 1461;\n const G = 621 + 28 * Q + 4 * Q1;\n const K = base[\"default\"].floorDiv(Q2 * 10000, 3652422);\n const E = base[\"default\"].floorDiv(3652422 * K, 10000);\n let J = Q2 - E + N - 1;\n let X = G + K;\n if (J > 366 && X % 4 === 0) {\n J -= 366;\n X++;\n } else if (J > 365 && X % 4 > 0) {\n J -= 365;\n X++;\n }\n const jd = base[\"default\"].floorDiv(36525 * (X - 1), 100) + 1721423 + J;\n return jd\n}\n\n/**\n * MoslemLeapYear returns true if year y of the Moslem calendar is a leap year.\n * @param {Number} year\n * @returns {Boolean} true if leap year\n */\nfunction MoslemLeapYear (year) { // (y int) bool\n const R = year % 30;\n return (11 * R + 3) % 30 > 18\n}\n\n/**\n * @typedef {object} DateObj\n * @property {number} year\n * @property {number} month\n * @property {number} day\n */\n\n/**\n * JulianToMoslem takes a year, month, and day of the Julian calendar and returns the equivalent year, month, and day of the Moslem calendar.\n *\n * @param {Number} y - julian year\n * @param {Number} m - julian month\n * @param {Number} d - julian day\n * @returns {DateObj}\n */\nfunction JulianToMoslem (y, m, d) { // (y, m, d int) (my, mm, md int)\n let W = 2;\n if (y % 4 === 0) {\n W = 1;\n }\n const N = base[\"default\"].floorDiv(275 * m, 9) - W * base[\"default\"].floorDiv(m + 9, 12) + d - 30;\n const A = int(y - 623);\n const B = base[\"default\"].floorDiv(A, 4);\n const C2 = (function (A) {\n const C = A % 4;\n const C1 = 365.25001 * (C);\n const C2 = Math.floor(C1);\n if (C1 - C2 > 0.5) {\n return int(C2) + 1\n }\n return int(C2)\n })(A);\n const Dp = 1461 * B + 170 + C2;\n const Q = base[\"default\"].floorDiv(Dp, 10631);\n const R = Dp % 10631;\n const J = base[\"default\"].floorDiv(R, 354);\n const K = R % 354;\n const O = base[\"default\"].floorDiv(11 * J + 14, 30);\n let my = 30 * Q + J + 1;\n let JJ = K - O + N - 1;\n let days = 354;\n if (MoslemLeapYear(y)) {\n days++;\n }\n if (JJ > days) {\n JJ -= days;\n my++;\n }\n let mm;\n let md;\n if (JJ === 355) {\n mm = 12;\n md = 30;\n } else {\n const S = base[\"default\"].floorDiv((JJ - 1) * 10, 295);\n mm = 1 + S;\n md = base[\"default\"].floorDiv(10 * JJ - 295 * S, 10);\n }\n return { year: my, month: mm, day: md }\n}\n\n/**\n * An MMonth specifies a month of the Moslum Calendar (Muharram = 1, ...).\n *\n * Upgraded to Unicode from the spellings given by Meeus.\n * Source: http://en.wikipedia.org/wiki/Islamic_calendar.\n */\nconst mmonths = [\n '',\n 'Mu\u1E25arram',\n '\u1E62afar',\n 'Rab\u012B\u02BF I',\n 'Rab\u012B\u02BF II',\n 'Jum\u0101d\u0101 I',\n 'Jum\u0101d\u0101 II',\n 'Rajab',\n 'Sha\u02BFb\u0101n',\n 'Rama\u1E0D\u0101n',\n 'Shaww\u0101l',\n 'Dh\u016B al-Qa\u02BFda',\n 'Dh\u016B al-\u1E24ijja'\n];\n\n/**\n * String returns the Romanization of the month (\"Mu\u1E25arram\", \"\u1E62afar\", ...).\n */\nfunction moslemMonth (m) {\n return mmonths[m]\n}\n\nvar jm = {\n JewishCalendar,\n MoslemToJD,\n MoslemLeapYear,\n JulianToMoslem,\n moslemMonth\n};\n\nexports.JewishCalendar = JewishCalendar;\nexports.JulianToMoslem = JulianToMoslem;\nexports.MoslemLeapYear = MoslemLeapYear;\nexports.MoslemToJD = MoslemToJD;\nexports[\"default\"] = jm;\nexports.moslemMonth = moslemMonth;\n", "'use strict';\n\nObject.defineProperty(exports, '__esModule', { value: true });\n\nvar base = require('./base.cjs');\nvar nutation = require('./nutation.cjs');\nvar planetposition = require('./planetposition.cjs');\n\n/**\n * @copyright 2013 Sonia Keys\n * @copyright 2016 commenthol\n * @license MIT\n * @module jupiter\n */\n\n/**\n * Physical computes quantities for physical observations of Jupiter.\n *\n * All angular results in radians.\n *\n * @param {number} jde - Julian ephemeris day\n * @param {Planet} earth\n * @param {Planet} jupiter\n * @return {Array}\n * {number} DS - Planetocentric declination of the Sun.\n * {number} DE - Planetocentric declination of the Earth.\n * {number} \u03C91 - Longitude of the System I central meridian of the illuminated disk,\n * as seen from Earth.\n * {number} \u03C92 - Longitude of the System II central meridian of the illuminated disk,\n * as seen from Earth.\n * {number} P - Geocentric position angle of Jupiter's northern rotation pole.\n */\nfunction physical (jde, earth, jupiter) { // (jde float64, earth, jupiter *pp.V87Planet) (DS, DE, \u03C91, \u03C92, P float64)\n // Step 1.0\n const d = jde - 2433282.5;\n const T1 = d / base[\"default\"].JulianCentury;\n const p = Math.PI / 180;\n const \u03B10 = 268 * p + 0.1061 * p * T1;\n const \u03B40 = 64.5 * p - 0.0164 * p * T1;\n // Step 2.0\n const W1 = 17.71 * p + 877.90003539 * p * d;\n const W2 = 16.838 * p + 870.27003539 * p * d;\n // Step 3.0\n const pos = earth.position(jde);\n let [l0, b0, R] = [pos.lon, pos.lat, pos.range];\n const fk5 = planetposition[\"default\"].toFK5(l0, b0, jde);\n l0 = fk5.lon;\n b0 = fk5.lat;\n // Steps 4-7.\n const [sl0, cl0] = base[\"default\"].sincos(l0);\n const sb0 = Math.sin(b0);\n let \u0394 = 4.0; // surely better than 0.0\n\n let l = 0;\n let b = 0;\n let r = 0;\n let x = 0;\n let y = 0;\n let z = 0;\n\n const f = function () {\n const \u03C4 = base[\"default\"].lightTime(\u0394);\n const pos = jupiter.position(jde - \u03C4);\n l = pos.lon;\n b = pos.lat;\n r = pos.range;\n const fk5 = planetposition[\"default\"].toFK5(l, b, jde);\n l = fk5.lon;\n b = fk5.lat;\n const [sb, cb] = base[\"default\"].sincos(b);\n const [sl, cl] = base[\"default\"].sincos(l);\n // (42.2) p. 289\n x = r * cb * cl - R * cl0;\n y = r * cb * sl - R * sl0;\n z = r * sb - R * sb0;\n // (42.3) p. 289\n \u0394 = Math.sqrt(x * x + y * y + z * z);\n };\n f();\n f();\n\n // Step 8.0\n const \u03B50 = nutation[\"default\"].meanObliquity(jde);\n // Step 9.0\n const [s\u03B50, c\u03B50] = base[\"default\"].sincos(\u03B50);\n const [sl, cl] = base[\"default\"].sincos(l);\n const [sb, cb] = base[\"default\"].sincos(b);\n const \u03B1s = Math.atan2(c\u03B50 * sl - s\u03B50 * sb / cb, cl);\n const \u03B4s = Math.asin(c\u03B50 * sb + s\u03B50 * cb * sl);\n // Step 10.0\n const [s\u03B4s, c\u03B4s] = base[\"default\"].sincos(\u03B4s);\n const [s\u03B40, c\u03B40] = base[\"default\"].sincos(\u03B40);\n const DS = Math.asin(-s\u03B40 * s\u03B4s - c\u03B40 * c\u03B4s * Math.cos(\u03B10 - \u03B1s));\n // Step 11.0\n const u = y * c\u03B50 - z * s\u03B50;\n const v = y * s\u03B50 + z * c\u03B50;\n let \u03B1 = Math.atan2(u, x);\n let \u03B4 = Math.atan(v / Math.hypot(x, u));\n const [s\u03B4, c\u03B4] = base[\"default\"].sincos(\u03B4);\n const [s\u03B10\u03B1, c\u03B10\u03B1] = base[\"default\"].sincos(\u03B10 - \u03B1);\n const \u03B6 = Math.atan2(s\u03B40 * c\u03B4 * c\u03B10\u03B1 - s\u03B4 * c\u03B40, c\u03B4 * s\u03B10\u03B1);\n // Step 12.0\n const DE = Math.asin(-s\u03B40 * s\u03B4 - c\u03B40 * c\u03B4 * Math.cos(\u03B10 - \u03B1));\n // Step 13.0\n let \u03C91 = W1 - \u03B6 - 5.07033 * p * \u0394;\n let \u03C92 = W2 - \u03B6 - 5.02626 * p * \u0394;\n // Step 14.0\n let C = (2 * r * \u0394 + R * R - r * r - \u0394 * \u0394) / (4 * r * \u0394);\n if (Math.sin(l - l0) < 0) {\n C = -C;\n }\n \u03C91 = base[\"default\"].pmod(\u03C91 + C, 2 * Math.PI);\n \u03C92 = base[\"default\"].pmod(\u03C92 + C, 2 * Math.PI);\n // Step 15.0\n const [\u0394\u03C8, \u0394\u03B5] = nutation[\"default\"].nutation(jde);\n const \u03B5 = \u03B50 + \u0394\u03B5;\n // Step 16.0\n const [s\u03B5, c\u03B5] = base[\"default\"].sincos(\u03B5);\n const [s\u03B1, c\u03B1] = base[\"default\"].sincos(\u03B1);\n \u03B1 += 0.005693 * p * (c\u03B1 * cl0 * c\u03B5 + s\u03B1 * sl0) / c\u03B4;\n \u03B4 += 0.005693 * p * (cl0 * c\u03B5 * (s\u03B5 / c\u03B5 * c\u03B4 - s\u03B1 * s\u03B4) + c\u03B1 * s\u03B4 * sl0);\n // Step 17.0\n const t\u03B4 = s\u03B4 / c\u03B4;\n const \u0394\u03B1 = (c\u03B5 + s\u03B5 * s\u03B1 * t\u03B4) * \u0394\u03C8 - c\u03B1 * t\u03B4 * \u0394\u03B5;\n const \u0394\u03B4 = s\u03B5 * c\u03B1 * \u0394\u03C8 + s\u03B1 * \u0394\u03B5;\n const \u03B1\u02B9 = \u03B1 + \u0394\u03B1;\n const \u03B4\u02B9 = \u03B4 + \u0394\u03B4;\n const [s\u03B10, c\u03B10] = base[\"default\"].sincos(\u03B10);\n const t\u03B40 = s\u03B40 / c\u03B40;\n const \u0394\u03B10 = (c\u03B5 + s\u03B5 * s\u03B10 * t\u03B40) * \u0394\u03C8 - c\u03B10 * t\u03B40 * \u0394\u03B5;\n const \u0394\u03B40 = s\u03B5 * c\u03B10 * \u0394\u03C8 + s\u03B10 * \u0394\u03B5;\n const \u03B10\u02B9 = \u03B10 + \u0394\u03B10;\n const \u03B40\u02B9 = \u03B40 + \u0394\u03B40;\n // Step 18.0\n const [s\u03B4\u02B9, c\u03B4\u02B9] = base[\"default\"].sincos(\u03B4\u02B9);\n const [s\u03B40\u02B9, c\u03B40\u02B9] = base[\"default\"].sincos(\u03B40\u02B9);\n const [s\u03B10\u02B9\u03B1\u02B9, c\u03B10\u02B9\u03B1\u02B9] = base[\"default\"].sincos(\u03B10\u02B9 - \u03B1\u02B9);\n // (42.4) p. 290\n let P = Math.atan2(c\u03B40\u02B9 * s\u03B10\u02B9\u03B1\u02B9, s\u03B40\u02B9 * c\u03B4\u02B9 - c\u03B40\u02B9 * s\u03B4\u02B9 * c\u03B10\u02B9\u03B1\u02B9);\n if (P < 0) {\n P += 2 * Math.PI;\n }\n return [DS, DE, \u03C91, \u03C92, P]\n}\n\n/**\n * Physical2 computes quantities for physical observations of Jupiter.\n *\n * Results are less accurate than with Physical().\n * All angular results in radians.\n *\n * @param {number} jde - Julian ephemeris day\n * @return {Array}\n * {number} DS - Planetocentric declination of the Sun.\n * {number} DE - Planetocentric declination of the Earth.\n * {number} \u03C91 - Longitude of the System I central meridian of the illuminated disk,\n * as seen from Earth.\n * {number} \u03C92 - Longitude of the System II central meridian of the illuminated disk,\n * as seen from Earth.\n */\nfunction physical2 (jde) { // (jde float64) (DS, DE, \u03C91, \u03C92 float64)\n const d = jde - base[\"default\"].J2000;\n const p = Math.PI / 180;\n const V = 172.74 * p + 0.00111588 * p * d;\n const M = 357.529 * p + 0.9856003 * p * d;\n const sV = Math.sin(V);\n const N = 20.02 * p + 0.0830853 * p * d + 0.329 * p * sV;\n const J = 66.115 * p + 0.9025179 * p * d - 0.329 * p * sV;\n const [sM, cM] = base[\"default\"].sincos(M);\n const [sN, cN] = base[\"default\"].sincos(N);\n const [s2M, c2M] = base[\"default\"].sincos(2 * M);\n const [s2N, c2N] = base[\"default\"].sincos(2 * N);\n const A = 1.915 * p * sM + 0.02 * p * s2M;\n const B = 5.555 * p * sN + 0.168 * p * s2N;\n const K = J + A - B;\n const R = 1.00014 - 0.01671 * cM - 0.00014 * c2M;\n const r = 5.20872 - 0.25208 * cN - 0.00611 * c2N;\n const [sK, cK] = base[\"default\"].sincos(K);\n const \u0394 = Math.sqrt(r * r + R * R - 2 * r * R * cK);\n const \u03C8 = Math.asin(R / \u0394 * sK);\n const dd = d - \u0394 / 173;\n let \u03C91 = 210.98 * p + 877.8169088 * p * dd + \u03C8 - B;\n let \u03C92 = 187.23 * p + 870.1869088 * p * dd + \u03C8 - B;\n let C = Math.sin(\u03C8 / 2);\n C *= C;\n if (sK > 0) {\n C = -C;\n }\n \u03C91 = base[\"default\"].pmod(\u03C91 + C, 2 * Math.PI);\n \u03C92 = base[\"default\"].pmod(\u03C92 + C, 2 * Math.PI);\n const \u03BB = 34.35 * p + 0.083091 * p * d + 0.329 * p * sV + B;\n const DS = 3.12 * p * Math.sin(\u03BB + 42.8 * p);\n const DE = DS - 2.22 * p * Math.sin(\u03C8) * Math.cos(\u03BB + 22 * p) -\n 1.3 * p * (r - \u0394) / \u0394 * Math.sin(\u03BB - 100.5 * p);\n return [DS, DE, \u03C91, \u03C92]\n}\n\nvar jupiter = {\n physical,\n physical2\n};\n\nexports[\"default\"] = jupiter;\nexports.physical = physical;\nexports.physical2 = physical2;\n", "'use strict';\n\nObject.defineProperty(exports, '__esModule', { value: true });\n\nvar base = require('./base.cjs');\n\n/**\n * @copyright 2013 Sonia Keys\n * @copyright 2016 commenthol\n * @license MIT\n * @module planetelements\n */\n\n// planet names used in cMean\nconst mercury = 'mercury';\nconst venus = 'venus';\nconst earth = 'earth';\nconst mars = 'mars';\nconst jupiter = 'jupiter';\nconst saturn = 'saturn';\nconst uranus = 'uranus';\nconst neptune = 'neptune';\n\n/**\n * Elements contains orbital elements as returned by functions in this package.\n *\n * Some other elements easily derived from these are\n *\n * Mean Anomolay, M = Lon - Peri\n * Argument of Perihelion, \u03C9 = Peri - Node\n *\n * @param {Number|Object} [lon] - mean longitude, L\n * @param {Number} [axis] - semimajor axis, a\n * @param {Number} [ecc] - eccentricity, e\n * @param {Number} [inc] - inclination, i\n * @param {Number} [node] - longitude of ascending node, \u03A9\n * @param {Number} [peri] - longitude of perihelion, \u03D6 (Meeus likes \u03C0 better)\n */\nfunction Elements (lon, axis, ecc, inc, node, peri) {\n const o = (typeof lon === 'object' ? lon : {});\n this.lon = o.lon || lon;\n this.axis = o.axis || axis;\n this.ecc = o.ecc || ecc;\n this.inc = o.inc || inc;\n this.node = o.node || node;\n this.peri = o.peri || peri;\n}\n\n/**\n * Table 31.A, p. 212\n */\nconst cMean = {\n mercury: { // Mercury\n L: [252.250906, 149474.0722491, 0.0003035, 0.000000018],\n a: [0.38709831],\n e: [0.20563175, 0.000020407, -0.0000000283, -0.00000000018],\n i: [7.004986, 0.0018215, -0.0000181, 0.000000056],\n \u03A9: [48.330893, 1.1861883, 0.00017542, 0.000000215],\n \u03D6: [77.456119, 1.5564776, 0.00029544, 0.000000009]\n },\n venus: { // Venus\n L: [181.979801, 58519.2130302, 0.00031014, 0.000000015],\n a: [0.72332982],\n e: [0.00677192, -0.000047765, 0.0000000981, 0.00000000046],\n i: [3.394662, 0.0010037, -0.00000088, -0.000000007],\n \u03A9: [76.67992, 0.9011206, 0.00040618, -0.000000093],\n \u03D6: [131.563703, 1.4022288, -0.00107618, -0.000005678]\n },\n earth: { // Earth\n L: [100.466457, 36000.7698278, 0.00030322, 0.00000002],\n a: [1.000001018],\n e: [0.01670863, -0.000042037, -0.0000001267, 0.00000000014],\n i: [0],\n \u03A9: undefined,\n \u03D6: [102.937348, 1.7195366, 0.00045688, -0.000000018]\n },\n mars: { // Mars\n L: [355.433, 19141.6964471, 0.00031052, 0.000000016],\n a: [1.523679342],\n e: [0.09340065, 0.000090484, -0.0000000806, -0.00000000025],\n i: [1.849726, -0.0006011, 0.00001276, -0.000000007],\n \u03A9: [49.558093, 0.7720959, 0.00001557, 0.000002267],\n \u03D6: [336.060234, 1.8410449, 0.00013477, 0.000000536]\n },\n jupiter: { // Jupiter\n L: [34.351519, 3036.3027748, 0.0002233, 0.000000037],\n a: [5.202603209, 0.0000001913],\n e: [0.04849793, 0.000163225, -0.0000004714, -0.00000000201],\n i: [1.303267, -0.0054965, 0.00000466, -0.000000002],\n \u03A9: [100.464407, 1.0209774, 0.00040315, 0.000000404],\n \u03D6: [14.331207, 1.6126352, 0.00103042, -0.000004464]\n },\n saturn: { // Saturn\n L: [50.077444, 1223.5110686, 0.00051908, -0.00000003],\n a: [9.554909192, -0.0000021390, 0.000000004],\n e: [0.05554814, -0.000346641, -0.0000006436, 0.0000000034],\n i: [2.488879, -0.0037362, -0.00001519, 0.000000087],\n \u03A9: [113.665503, 0.877088, -0.00012176, -0.000002249],\n \u03D6: [93.057237, 1.9637613, 0.00083753, 0.000004928]\n },\n uranus: { // Uranus\n L: [314.055005, 429.8640561, 0.0003039, 0.000000026],\n a: [19.218446062, -0.0000000372, 0.00000000098],\n e: [0.04638122, -0.000027293, 0.0000000789, 0.00000000024],\n i: [0.773197, 0.0007744, 0.00003749, -0.000000092],\n \u03A9: [74.005957, 0.5211278, 0.00133947, 0.000018484],\n \u03D6: [173.005291, 1.486379, 0.00021406, 0.000000434]\n },\n neptune: { // Neptune\n L: [304.348665, 219.8833092, 0.00030882, 0.000000018],\n a: [30.110386869, -0.0000001663, 0.00000000069],\n e: [0.00945575, 0.000006033, 0, -0.00000000005],\n i: [1.769953, -0.0093082, -0.00000708, 0.000000027],\n \u03A9: [131.784057, 1.1022039, 0.00025952, -0.000000637],\n \u03D6: [48.120276, 1.4262957, 0.00038434, 0.00000002]\n }\n};\n\n/**\n * Mean returns mean orbital elements for a planet\n *\n * Argument p must be a planet const as defined above, argument e is\n * a result parameter. A valid non-undefined pointer to an Elements struct\n * must be passed in.\n *\n * Results are referenced to mean dynamical ecliptic and equinox of date.\n *\n * Semimajor axis is in AU, angular elements are in radians.\n */\nfunction mean (p, jde, e) {\n const T = base[\"default\"].J2000Century(jde);\n const c = cMean[p];\n e = e || new Elements();\n e.lon = base[\"default\"].pmod(base[\"default\"].horner(T, c.L) * Math.PI / 180, 2 * Math.PI);\n e.axis = base[\"default\"].horner(T, c.a);\n e.ecc = base[\"default\"].horner(T, c.e);\n e.inc = base[\"default\"].horner(T, c.i) * Math.PI / 180;\n e.node = base[\"default\"].horner(T, c.\u03A9) * Math.PI / 180;\n e.peri = base[\"default\"].horner(T, c.\u03D6) * Math.PI / 180;\n return e\n}\n\n/**\n * Inc returns mean inclination for a planet at a date.\n *\n * Result is the same as the Inc field returned by function Mean. That is,\n * radians, referenced to mean dynamical ecliptic and equinox of date.\n */\nfunction inc (p, jde) { // (p int, jde float64) float64\n return base[\"default\"].horner(base[\"default\"].J2000Century(jde), cMean[p].i) * Math.PI / 180\n}\n\n/**\n * Node returns mean longitude of ascending node for a planet at a date.\n *\n * Result is the same as the Node field returned by function Mean. That is,\n * radians, referenced to mean dynamical ecliptic and equinox of date.\n */\nfunction node (p, jde) { // (p int, jde float64) float64\n return base[\"default\"].horner(base[\"default\"].J2000Century(jde), cMean[p].\u03A9) * Math.PI / 180\n}\n\nvar planetelements = {\n mercury,\n venus,\n earth,\n mars,\n jupiter,\n saturn,\n uranus,\n neptune,\n Elements,\n mean,\n inc,\n node\n};\n\nexports.Elements = Elements;\nexports[\"default\"] = planetelements;\nexports.earth = earth;\nexports.inc = inc;\nexports.jupiter = jupiter;\nexports.mars = mars;\nexports.mean = mean;\nexports.mercury = mercury;\nexports.neptune = neptune;\nexports.node = node;\nexports.saturn = saturn;\nexports.uranus = uranus;\nexports.venus = venus;\n", "'use strict';\n\nObject.defineProperty(exports, '__esModule', { value: true });\n\nvar base = require('./base.cjs');\nvar planetelements = require('./planetelements.cjs');\nvar solar = require('./solar.cjs');\nrequire('./coord.cjs');\nrequire('./nutation.cjs');\n\n/**\n * @copyright 2013 Sonia Keys\n * @copyright 2016 commenthol\n * @license MIT\n * @module jupitermoons\n */\n\n// Moon names in order of position in Array\nconst io = 0;\nconst europa = 1;\nconst ganymede = 2;\nconst callisto = 3;\n\nconst k = [17295, 21819, 27558, 36548];\n\n/**\n * XY used for returning coordinates of moons.\n * @param {number} x - in units of Jupiter radii\n * @param {number} y - in units of Jupiter radii\n */\nfunction XY (x, y) {\n this.x = x;\n this.y = y;\n}\n\n/**\n * Positions computes positions of moons of Jupiter.\n *\n * Returned coordinates are in units of Jupiter radii.\n *\n * @param {Number} jde - Julian ephemeris day\n * @return {Array} x, y - coordinates of the 4 Satellites of jupiter\n */\nfunction positions (jde) {\n const d = jde - base[\"default\"].J2000;\n const p = Math.PI / 180;\n const V = 172.74 * p + 0.00111588 * p * d;\n const M = 357.529 * p + 0.9856003 * p * d;\n const sV = Math.sin(V);\n const N = 20.02 * p + 0.0830853 * p * d + 0.329 * p * sV;\n const J = 66.115 * p + 0.9025179 * p * d - 0.329 * p * sV;\n const [sM, cM] = base[\"default\"].sincos(M);\n const [sN, cN] = base[\"default\"].sincos(N);\n const [s2M, c2M] = base[\"default\"].sincos(2 * M);\n const [s2N, c2N] = base[\"default\"].sincos(2 * N);\n const A = 1.915 * p * sM + 0.02 * p * s2M;\n const B = 5.555 * p * sN + 0.168 * p * s2N;\n const K = J + A - B;\n const R = 1.00014 - 0.01671 * cM - 0.00014 * c2M;\n const r = 5.20872 - 0.25208 * cN - 0.00611 * c2N;\n const [sK, cK] = base[\"default\"].sincos(K);\n const \u0394 = Math.sqrt(r * r + R * R - 2 * r * R * cK);\n const \u03C8 = Math.asin(R / \u0394 * sK);\n const \u03BB = 34.35 * p + 0.083091 * p * d + 0.329 * p * sV + B;\n const DS = 3.12 * p * Math.sin(\u03BB + 42.8 * p);\n const DE = DS - 2.22 * p * Math.sin(\u03C8) * Math.cos(\u03BB + 22 * p) -\n 1.3 * p * (r - \u0394) / \u0394 * Math.sin(\u03BB - 100.5 * p);\n const dd = d - \u0394 / 173;\n const u1 = 163.8069 * p + 203.4058646 * p * dd + \u03C8 - B;\n const u2 = 358.414 * p + 101.2916335 * p * dd + \u03C8 - B;\n const u3 = 5.7176 * p + 50.234518 * p * dd + \u03C8 - B;\n const u4 = 224.8092 * p + 21.48798 * p * dd + \u03C8 - B;\n const G = 331.18 * p + 50.310482 * p * dd;\n const H = 87.45 * p + 21.569231 * p * dd;\n const [s212, c212] = base[\"default\"].sincos(2 * (u1 - u2));\n const [s223, c223] = base[\"default\"].sincos(2 * (u2 - u3));\n const [sG, cG] = base[\"default\"].sincos(G);\n const [sH, cH] = base[\"default\"].sincos(H);\n const c1 = 0.473 * p * s212;\n const c2 = 1.065 * p * s223;\n const c3 = 0.165 * p * sG;\n const c4 = 0.843 * p * sH;\n const r1 = 5.9057 - 0.0244 * c212;\n const r2 = 9.3966 - 0.0882 * c223;\n const r3 = 14.9883 - 0.0216 * cG;\n const r4 = 26.3627 - 0.1939 * cH;\n const sDE = Math.sin(DE);\n const xy = function (u, r) {\n const [su, cu] = base[\"default\"].sincos(u);\n return new XY(r * su, -r * cu * sDE)\n };\n return [xy(u1 + c1, r1), xy(u2 + c2, r2), xy(u3 + c3, r3), xy(u4 + c4, r4)]\n}\n\n/**\n * Positions computes positions of moons of Jupiter.\n *\n * High accuracy method based on theory \"E5\" Results returned in\n * argument pos, which must not be undefined. Returned coordinates in units\n * of Jupiter radii.\n *\n * @param {Number} jde - Julian ephemeris day\n * @param {Planet} earth - VSOP87 Planet earth\n * @param {Planet} jupiter - VSOP87 Planet jupiter\n * @param {Array} [pos] - reference to array of positions (same as return value)\n * @return {Array} x, y - coordinates of the 4 Satellites of jupiter\n */\nfunction e5 (jde, earth, jupiter, pos) {\n pos = pos || new Array(4);\n\n // variables assigned in following block\n let \u03BB0, \u03B20, t;\n let \u0394 = 5.0\n\n ;(function () {\n const { lon, lat, range } = solar[\"default\"].trueVSOP87(earth, jde);\n const [s, \u03B2, R] = [lon, lat, range];\n const [ss, cs] = base[\"default\"].sincos(s);\n const s\u03B2 = Math.sin(\u03B2);\n let \u03C4 = base[\"default\"].lightTime(\u0394);\n let x = 0;\n let y = 0;\n let z = 0;\n\n function f () {\n const { lon, lat, range } = jupiter.position(jde - \u03C4);\n const [sl, cl] = base[\"default\"].sincos(lon);\n const [sb, cb] = base[\"default\"].sincos(lat);\n x = range * cb * cl + R * cs;\n y = range * cb * sl + R * ss;\n z = range * sb + R * s\u03B2;\n \u0394 = Math.sqrt(x * x + y * y + z * z);\n \u03C4 = base[\"default\"].lightTime(\u0394);\n }\n\n f();\n f();\n\n \u03BB0 = Math.atan2(y, x);\n \u03B20 = Math.atan(z / Math.hypot(x, y));\n t = jde - 2443000.5 - \u03C4;\n })();\n\n const p = Math.PI / 180;\n const l1 = 106.07719 * p + 203.48895579 * p * t;\n const l2 = 175.73161 * p + 101.374724735 * p * t;\n const l3 = 120.55883 * p + 50.317609207 * p * t;\n const l4 = 84.44459 * p + 21.571071177 * p * t;\n const \u03C01 = 97.0881 * p + 0.16138586 * p * t;\n const \u03C02 = 154.8663 * p + 0.04726307 * p * t;\n const \u03C03 = 188.184 * p + 0.00712734 * p * t;\n const \u03C04 = 335.2868 * p + 0.00184 * p * t;\n const \u03C91 = 312.3346 * p - 0.13279386 * p * t;\n const \u03C92 = 100.4411 * p - 0.03263064 * p * t;\n const \u03C93 = 119.1942 * p - 0.00717703 * p * t;\n const \u03C94 = 322.6186 * p - 0.00175934 * p * t;\n const \u0393 = 0.33033 * p * Math.sin(163.679 * p + 0.0010512 * p * t) +\n 0.03439 * p * Math.sin(34.486 * p - 0.0161731 * p * t);\n const \u03A6\u03BB = 199.6766 * p + 0.1737919 * p * t;\n let \u03C8 = 316.5182 * p - 0.00000208 * p * t;\n const G = 30.23756 * p + 0.0830925701 * p * t + \u0393;\n const G\u02B9 = 31.97853 * p + 0.0334597339 * p * t;\n const \u03A0 = 13.469942 * p;\n\n const \u03A31 = 0.47259 * p * Math.sin(2 * (l1 - l2)) +\n -0.03478 * p * Math.sin(\u03C03 - \u03C04) +\n 0.01081 * p * Math.sin(l2 - 2 * l3 + \u03C03) +\n 0.00738 * p * Math.sin(\u03A6\u03BB) +\n 0.00713 * p * Math.sin(l2 - 2 * l3 + \u03C02) +\n -0.00674 * p * Math.sin(\u03C01 + \u03C03 - 2 * \u03A0 - 2 * G) +\n 0.00666 * p * Math.sin(l2 - 2 * l3 + \u03C04) +\n 0.00445 * p * Math.sin(l1 - \u03C03) +\n -0.00354 * p * Math.sin(l1 - l2) +\n -0.00317 * p * Math.sin(2 * \u03C8 - 2 * \u03A0) +\n 0.00265 * p * Math.sin(l1 - \u03C04) +\n -0.00186 * p * Math.sin(G) +\n 0.00162 * p * Math.sin(\u03C02 - \u03C03) +\n 0.00158 * p * Math.sin(4 * (l1 - l2)) +\n -0.00155 * p * Math.sin(l1 - l3) +\n -0.00138 * p * Math.sin(\u03C8 + \u03C93 - 2 * \u03A0 - 2 * G) +\n -0.00115 * p * Math.sin(2 * (l1 - 2 * l2 + \u03C92)) +\n 0.00089 * p * Math.sin(\u03C02 - \u03C04) +\n 0.00085 * p * Math.sin(l1 + \u03C03 - 2 * \u03A0 - 2 * G) +\n 0.00083 * p * Math.sin(\u03C92 - \u03C93) +\n 0.00053 * p * Math.sin(\u03C8 - \u03C92);\n const \u03A32 = 1.06476 * p * Math.sin(2 * (l2 - l3)) +\n 0.04256 * p * Math.sin(l1 - 2 * l2 + \u03C03) +\n 0.03581 * p * Math.sin(l2 - \u03C03) +\n 0.02395 * p * Math.sin(l1 - 2 * l2 + \u03C04) +\n 0.01984 * p * Math.sin(l2 - \u03C04) +\n -0.01778 * p * Math.sin(\u03A6\u03BB) +\n 0.01654 * p * Math.sin(l2 - \u03C02) +\n 0.01334 * p * Math.sin(l2 - 2 * l3 + \u03C02) +\n 0.01294 * p * Math.sin(\u03C03 - \u03C04) +\n -0.01142 * p * Math.sin(l2 - l3) +\n -0.01057 * p * Math.sin(G) +\n -0.00775 * p * Math.sin(2 * (\u03C8 - \u03A0)) +\n 0.00524 * p * Math.sin(2 * (l1 - l2)) +\n -0.0046 * p * Math.sin(l1 - l3) +\n 0.00316 * p * Math.sin(\u03C8 - 2 * G + \u03C93 - 2 * \u03A0) +\n -0.00203 * p * Math.sin(\u03C01 + \u03C03 - 2 * \u03A0 - 2 * G) +\n 0.00146 * p * Math.sin(\u03C8 - \u03C93) +\n -0.00145 * p * Math.sin(2 * G) +\n 0.00125 * p * Math.sin(\u03C8 - \u03C94) +\n -0.00115 * p * Math.sin(l1 - 2 * l3 + \u03C03) +\n -0.00094 * p * Math.sin(2 * (l2 - \u03C92)) +\n 0.00086 * p * Math.sin(2 * (l1 - 2 * l2 + \u03C92)) +\n -0.00086 * p * Math.sin(5 * G\u02B9 - 2 * G + 52.225 * p) +\n -0.00078 * p * Math.sin(l2 - l4) +\n -0.00064 * p * Math.sin(3 * l3 - 7 * l4 + 4 * \u03C04) +\n 0.00064 * p * Math.sin(\u03C01 - \u03C04) +\n -0.00063 * p * Math.sin(l1 - 2 * l3 + \u03C04) +\n 0.00058 * p * Math.sin(\u03C93 - \u03C94) +\n 0.00056 * p * Math.sin(2 * (\u03C8 - \u03A0 - G)) +\n 0.00056 * p * Math.sin(2 * (l2 - l4)) +\n 0.00055 * p * Math.sin(2 * (l1 - l3)) +\n 0.00052 * p * Math.sin(3 * l3 - 7 * l4 + \u03C03 + 3 * \u03C04) +\n -0.00043 * p * Math.sin(l1 - \u03C03) +\n 0.00041 * p * Math.sin(5 * (l2 - l3)) +\n 0.00041 * p * Math.sin(\u03C04 - \u03A0) +\n 0.00032 * p * Math.sin(\u03C92 - \u03C93) +\n 0.00032 * p * Math.sin(2 * (l3 - G - \u03A0));\n const \u03A33 = 0.1649 * p * Math.sin(l3 - \u03C03) +\n 0.09081 * p * Math.sin(l3 - \u03C04) +\n -0.06907 * p * Math.sin(l2 - l3) +\n 0.03784 * p * Math.sin(\u03C03 - \u03C04) +\n 0.01846 * p * Math.sin(2 * (l3 - l4)) +\n -0.0134 * p * Math.sin(G) +\n -0.01014 * p * Math.sin(2 * (\u03C8 - \u03A0)) +\n 0.00704 * p * Math.sin(l2 - 2 * l3 + \u03C03) +\n -0.0062 * p * Math.sin(l2 - 2 * l3 + \u03C02) +\n -0.00541 * p * Math.sin(l3 - l4) +\n 0.00381 * p * Math.sin(l2 - 2 * l3 + \u03C04) +\n 0.00235 * p * Math.sin(\u03C8 - \u03C93) +\n 0.00198 * p * Math.sin(\u03C8 - \u03C94) +\n 0.00176 * p * Math.sin(\u03A6\u03BB) +\n 0.0013 * p * Math.sin(3 * (l3 - l4)) +\n 0.00125 * p * Math.sin(l1 - l3) +\n -0.00119 * p * Math.sin(5 * G\u02B9 - 2 * G + 52.225 * p) +\n 0.00109 * p * Math.sin(l1 - l2) +\n -0.001 * p * Math.sin(3 * l3 - 7 * l4 + 4 * \u03C04) +\n 0.00091 * p * Math.sin(\u03C93 - \u03C94) +\n 0.0008 * p * Math.sin(3 * l3 - 7 * l4 + \u03C03 + 3 * \u03C04) +\n -0.00075 * p * Math.sin(2 * l2 - 3 * l3 + \u03C03) +\n 0.00072 * p * Math.sin(\u03C01 + \u03C03 - 2 * \u03A0 - 2 * G) +\n 0.00069 * p * Math.sin(\u03C04 - \u03A0) +\n -0.00058 * p * Math.sin(2 * l3 - 3 * l4 + \u03C04) +\n -0.00057 * p * Math.sin(l3 - 2 * l4 + \u03C04) +\n 0.00056 * p * Math.sin(l3 + \u03C03 - 2 * \u03A0 - 2 * G) +\n -0.00052 * p * Math.sin(l2 - 2 * l3 + \u03C01) +\n -0.00050 * p * Math.sin(\u03C02 - \u03C03) +\n 0.00048 * p * Math.sin(l3 - 2 * l4 + \u03C03) +\n -0.00045 * p * Math.sin(2 * l2 - 3 * l3 + \u03C04) +\n -0.00041 * p * Math.sin(\u03C02 - \u03C04) +\n -0.00038 * p * Math.sin(2 * G) +\n -0.00037 * p * Math.sin(\u03C03 - \u03C04 + \u03C93 - \u03C94) +\n -0.00032 * p * Math.sin(3 * l3 - 7 * l4 + 2 * \u03C03 + 2 * \u03C04) +\n 0.0003 * p * Math.sin(4 * (l3 - l4)) +\n 0.00029 * p * Math.sin(l3 + \u03C04 - 2 * \u03A0 - 2 * G) +\n -0.00028 * p * Math.sin(\u03C93 + \u03C8 - 2 * \u03A0 - 2 * G) +\n 0.00026 * p * Math.sin(l3 - \u03A0 - G) +\n 0.00024 * p * Math.sin(l2 - 3 * l3 + 2 * l4) +\n 0.00021 * p * Math.sin(2 * (l3 - \u03A0 - G)) +\n -0.00021 * p * Math.sin(l3 - \u03C02) +\n 0.00017 * p * Math.sin(2 * (l3 - \u03C03));\n const \u03A34 = 0.84287 * p * Math.sin(l4 - \u03C04) +\n 0.03431 * p * Math.sin(\u03C04 - \u03C03) +\n -0.03305 * p * Math.sin(2 * (\u03C8 - \u03A0)) +\n -0.03211 * p * Math.sin(G) +\n -0.01862 * p * Math.sin(l4 - \u03C03) +\n 0.01186 * p * Math.sin(\u03C8 - \u03C94) +\n 0.00623 * p * Math.sin(l4 + \u03C04 - 2 * G - 2 * \u03A0) +\n 0.00387 * p * Math.sin(2 * (l4 - \u03C04)) +\n -0.00284 * p * Math.sin(5 * G\u02B9 - 2 * G + 52.225 * p) +\n -0.00234 * p * Math.sin(2 * (\u03C8 - \u03C04)) +\n -0.00223 * p * Math.sin(l3 - l4) +\n -0.00208 * p * Math.sin(l4 - \u03A0) +\n 0.00178 * p * Math.sin(\u03C8 + \u03C94 - 2 * \u03C04) +\n 0.00134 * p * Math.sin(\u03C04 - \u03A0) +\n 0.00125 * p * Math.sin(2 * (l4 - G - \u03A0)) +\n -0.00117 * p * Math.sin(2 * G) +\n -0.00112 * p * Math.sin(2 * (l3 - l4)) +\n 0.00107 * p * Math.sin(3 * l3 - 7 * l4 + 4 * \u03C04) +\n 0.00102 * p * Math.sin(l4 - G - \u03A0) +\n 0.00096 * p * Math.sin(2 * l4 - \u03C8 - \u03C94) +\n 0.00087 * p * Math.sin(2 * (\u03C8 - \u03C94)) +\n -0.00085 * p * Math.sin(3 * l3 - 7 * l4 + \u03C03 + 3 * \u03C04) +\n 0.00085 * p * Math.sin(l3 - 2 * l4 + \u03C04) +\n -0.00081 * p * Math.sin(2 * (l4 - \u03C8)) +\n 0.00071 * p * Math.sin(l4 + \u03C04 - 2 * \u03A0 - 3 * G) +\n 0.00061 * p * Math.sin(l1 - l4) +\n -0.00056 * p * Math.sin(\u03C8 - \u03C93) +\n -0.00054 * p * Math.sin(l3 - 2 * l4 + \u03C03) +\n 0.00051 * p * Math.sin(l2 - l4) +\n 0.00042 * p * Math.sin(2 * (\u03C8 - G - \u03A0)) +\n 0.00039 * p * Math.sin(2 * (\u03C04 - \u03C94)) +\n 0.00036 * p * Math.sin(\u03C8 + \u03A0 - \u03C04 - \u03C94) +\n 0.00035 * p * Math.sin(2 * G\u02B9 - G + 188.37 * p) +\n -0.00035 * p * Math.sin(l4 - \u03C04 + 2 * \u03A0 - 2 * \u03C8) +\n -0.00032 * p * Math.sin(l4 + \u03C04 - 2 * \u03A0 - G) +\n 0.0003 * p * Math.sin(2 * G\u02B9 - 2 * G + 149.15 * p) +\n 0.00029 * p * Math.sin(3 * l3 - 7 * l4 + 2 * \u03C03 + 2 * \u03C04) +\n 0.00028 * p * Math.sin(l4 - \u03C04 + 2 * \u03C8 - 2 * \u03A0) +\n -0.00028 * p * Math.sin(2 * (l4 - \u03C94)) +\n -0.00027 * p * Math.sin(\u03C03 - \u03C04 + \u03C93 - \u03C94) +\n -0.00026 * p * Math.sin(5 * G\u02B9 - 3 * G + 188.37 * p) +\n 0.00025 * p * Math.sin(\u03C94 - \u03C93) +\n -0.00025 * p * Math.sin(l2 - 3 * l3 + 2 * l4) +\n -0.00023 * p * Math.sin(3 * (l3 - l4)) +\n 0.00021 * p * Math.sin(2 * l4 - 2 * \u03A0 - 3 * G) +\n -0.00021 * p * Math.sin(2 * l3 - 3 * l4 + \u03C04) +\n 0.00019 * p * Math.sin(l4 - \u03C04 - G) +\n -0.00019 * p * Math.sin(2 * l4 - \u03C03 - \u03C04) +\n -0.00018 * p * Math.sin(l4 - \u03C04 + G) +\n -0.00016 * p * Math.sin(l4 + \u03C03 - 2 * \u03A0 - 2 * G);\n const L1 = l1 + \u03A31;\n const L2 = l2 + \u03A32;\n const L3 = l3 + \u03A33;\n const L4 = l4 + \u03A34;\n\n // variables assigned in following block\n let I;\n const X = new Array(5).fill(0);\n const Y = new Array(5).fill(0);\n const Z = new Array(5).fill(0);\n let R\n\n ;(function () {\n const L = [L1, L2, L3, L4];\n const B = [\n Math.atan(0.0006393 * Math.sin(L1 - \u03C91) +\n 0.0001825 * Math.sin(L1 - \u03C92) +\n 0.0000329 * Math.sin(L1 - \u03C93) +\n -0.0000311 * Math.sin(L1 - \u03C8) +\n 0.0000093 * Math.sin(L1 - \u03C94) +\n 0.0000075 * Math.sin(3 * L1 - 4 * l2 - 1.9927 * \u03A31 + \u03C92) +\n 0.0000046 * Math.sin(L1 + \u03C8 - 2 * \u03A0 - 2 * G)),\n Math.atan(0.0081004 * Math.sin(L2 - \u03C92) +\n 0.0004512 * Math.sin(L2 - \u03C93) +\n -0.0003284 * Math.sin(L2 - \u03C8) +\n 0.0001160 * Math.sin(L2 - \u03C94) +\n 0.0000272 * Math.sin(l1 - 2 * l3 + 1.0146 * \u03A32 + \u03C92) +\n -0.0000144 * Math.sin(L2 - \u03C91) +\n 0.0000143 * Math.sin(L2 + \u03C8 - 2 * \u03A0 - 2 * G) +\n 0.0000035 * Math.sin(L2 - \u03C8 + G) +\n -0.0000028 * Math.sin(l1 - 2 * l3 + 1.0146 * \u03A32 + \u03C93)),\n Math.atan(0.0032402 * Math.sin(L3 - \u03C93) +\n -0.0016911 * Math.sin(L3 - \u03C8) +\n 0.0006847 * Math.sin(L3 - \u03C94) +\n -0.0002797 * Math.sin(L3 - \u03C92) +\n 0.0000321 * Math.sin(L3 + \u03C8 - 2 * \u03A0 - 2 * G) +\n 0.0000051 * Math.sin(L3 - \u03C8 + G) +\n -0.0000045 * Math.sin(L3 - \u03C8 - G) +\n -0.0000045 * Math.sin(L3 + \u03C8 - 2 * \u03A0) +\n 0.0000037 * Math.sin(L3 + \u03C8 - 2 * \u03A0 - 3 * G) +\n 0.000003 * Math.sin(2 * l2 - 3 * L3 + 4.03 * \u03A33 + \u03C92) +\n -0.0000021 * Math.sin(2 * l2 - 3 * L3 + 4.03 * \u03A33 + \u03C93)),\n Math.atan(-0.0076579 * Math.sin(L4 - \u03C8) +\n 0.0044134 * Math.sin(L4 - \u03C94) +\n -0.0005112 * Math.sin(L4 - \u03C93) +\n 0.0000773 * Math.sin(L4 + \u03C8 - 2 * \u03A0 - 2 * G) +\n 0.0000104 * Math.sin(L4 - \u03C8 + G) +\n -0.0000102 * Math.sin(L4 - \u03C8 - G) +\n 0.0000088 * Math.sin(L4 + \u03C8 - 2 * \u03A0 - 3 * G) +\n -0.0000038 * Math.sin(L4 + \u03C8 - 2 * \u03A0 - G))\n ];\n R = [\n 5.90569 * (1 +\n -0.0041339 * Math.cos(2 * (l1 - l2)) +\n -0.0000387 * Math.cos(l1 - \u03C03) +\n -0.0000214 * Math.cos(l1 - \u03C04) +\n 0.000017 * Math.cos(l1 - l2) +\n -0.0000131 * Math.cos(4 * (l1 - l2)) +\n 0.0000106 * Math.cos(l1 - l3) +\n -0.0000066 * Math.cos(l1 + \u03C03 - 2 * \u03A0 - 2 * G)),\n 9.39657 * (1 +\n 0.0093848 * Math.cos(l1 - l2) +\n -0.0003116 * Math.cos(l2 - \u03C03) +\n -0.0001744 * Math.cos(l2 - \u03C04) +\n -0.0001442 * Math.cos(l2 - \u03C02) +\n 0.0000553 * Math.cos(l2 - l3) +\n 0.0000523 * Math.cos(l1 - l3) +\n -0.0000290 * Math.cos(2 * (l1 - l2)) +\n 0.0000164 * Math.cos(2 * (l2 - \u03C92)) +\n 0.0000107 * Math.cos(l1 - 2 * l3 + \u03C03) +\n -0.0000102 * Math.cos(l2 - \u03C01) +\n -0.0000091 * Math.cos(2 * (l1 - l3))),\n 14.98832 * (1 +\n -0.0014388 * Math.cos(l3 - \u03C03) +\n -0.0007917 * Math.cos(l3 - \u03C04) +\n 0.0006342 * Math.cos(l2 - l3) +\n -0.0001761 * Math.cos(2 * (l3 - l4)) +\n 0.0000294 * Math.cos(l3 - l4) +\n -0.0000156 * Math.cos(3 * (l3 - l4)) +\n 0.0000156 * Math.cos(l1 - l3) +\n -0.0000153 * Math.cos(l1 - l2) +\n 0.000007 * Math.cos(2 * l2 - 3 * l3 + \u03C03) +\n -0.0000051 * Math.cos(l3 + \u03C03 - 2 * \u03A0 - 2 * G)),\n 26.36273 * (1 +\n -0.0073546 * Math.cos(l4 - \u03C04) +\n 0.0001621 * Math.cos(l4 - \u03C03) +\n 0.0000974 * Math.cos(l3 - l4) +\n -0.0000543 * Math.cos(l4 + \u03C04 - 2 * \u03A0 - 2 * G) +\n -0.0000271 * Math.cos(2 * (l4 - \u03C04)) +\n 0.0000182 * Math.cos(l4 - \u03A0) +\n 0.0000177 * Math.cos(2 * (l3 - l4)) +\n -0.0000167 * Math.cos(2 * l4 - \u03C8 - \u03C94) +\n 0.0000167 * Math.cos(\u03C8 - \u03C94) +\n -0.0000155 * Math.cos(2 * (l4 - \u03A0 - G)) +\n 0.0000142 * Math.cos(2 * (l4 - \u03C8)) +\n 0.0000105 * Math.cos(l1 - l4) +\n 0.0000092 * Math.cos(l2 - l4) +\n -0.0000089 * Math.cos(l4 - \u03A0 - G) +\n -0.0000062 * Math.cos(l4 + \u03C04 - 2 * \u03A0 - 3 * G) +\n 0.0000048 * Math.cos(2 * (l4 - \u03C94)))\n ];\n // p. 311\n const T0 = (jde - 2433282.423) / base[\"default\"].JulianCentury;\n const P = (1.3966626 * p + 0.0003088 * p * T0) * T0;\n for (const i in L) {\n L[i] += P;\n }\n \u03C8 += P;\n const T = (jde - base[\"default\"].J1900) / base[\"default\"].JulianCentury;\n I = 3.120262 * p + 0.0006 * p * T;\n for (const i in L) {\n const [sL\u03C8, cL\u03C8] = base[\"default\"].sincos(L[i] - \u03C8);\n const [sB, cB] = base[\"default\"].sincos(B[i]);\n X[i] = R[i] * cL\u03C8 * cB;\n Y[i] = R[i] * sL\u03C8 * cB;\n Z[i] = R[i] * sB;\n }\n })();\n\n Z[4] = 1;\n // p. 312\n const A = new Array(5).fill(0);\n const B = new Array(5).fill(0);\n const C = new Array(5).fill(0);\n const [sI, cI] = base[\"default\"].sincos(I);\n const \u03A9 = planetelements[\"default\"].node(planetelements[\"default\"].jupiter, jde);\n const [s\u03A9, c\u03A9] = base[\"default\"].sincos(\u03A9);\n const [s\u03A6, c\u03A6] = base[\"default\"].sincos(\u03C8 - \u03A9);\n const [si, ci] = base[\"default\"].sincos(planetelements[\"default\"].inc(planetelements[\"default\"].jupiter, jde));\n const [s\u03BB0, c\u03BB0] = base[\"default\"].sincos(\u03BB0);\n const [s\u03B20, c\u03B20] = base[\"default\"].sincos(\u03B20);\n\n for (const i in A) {\n let a0;\n // step 1\n let a = X[i];\n let b = Y[i] * cI - Z[i] * sI;\n let c = Y[i] * sI + Z[i] * cI;\n // step 2\n a0 = a * c\u03A6 - b * s\u03A6;\n b = a * s\u03A6 + b * c\u03A6;\n a = a0;\n // step 3\n const b0 = b * ci - c * si;\n c = b * si + c * ci;\n b = b0;\n // step 4\n a0 = a * c\u03A9 - b * s\u03A9;\n b = a * s\u03A9 + b * c\u03A9;\n a = a0;\n // step 5\n a0 = a * s\u03BB0 - b * c\u03BB0;\n b = a * c\u03BB0 + b * s\u03BB0;\n a = a0;\n // step 6\n A[i] = a;\n B[i] = c * s\u03B20 + b * c\u03B20;\n C[i] = c * c\u03B20 - b * s\u03B20;\n }\n const [sD, cD] = base[\"default\"].sincos(Math.atan2(A[4], C[4]));\n // p. 313\n for (let i = 0; i < 4; i++) {\n let x = A[i] * cD - C[i] * sD;\n const y = A[i] * sD + C[i] * cD;\n const z = B[i];\n // differential light time\n const d = x / R[i];\n x += Math.abs(z) / k[i] * Math.sqrt(1 - d * d);\n // perspective effect\n const W = \u0394 / (\u0394 + z / 2095);\n pos[i] = new XY(x * W, y * W);\n }\n return pos\n}\n\nvar jupitermoons = {\n io,\n europa,\n ganymede,\n callisto,\n positions,\n e5\n};\n\nexports.callisto = callisto;\nexports[\"default\"] = jupitermoons;\nexports.e5 = e5;\nexports.europa = europa;\nexports.ganymede = ganymede;\nexports.io = io;\nexports.positions = positions;\n", "'use strict';\n\nObject.defineProperty(exports, '__esModule', { value: true });\n\nvar base = require('./base.cjs');\nvar interpolation = require('./interpolation.cjs');\n\n/**\n * @copyright 2013 Sonia Keys\n * @copyright 2016 commenthol\n * @license MIT\n * @module line\n */\n\n/**\n * Time computes the time at which a moving body is on a straight line (great\n * circle) between two fixed points, such as stars.\n *\n * Coordinates may be right ascensions and declinations or longitudes and\n * latitudes. Fixed points are r1, d1, r2, d2. Moving body is an ephemeris\n * of 5 rows, r3, d3, starting at time t1 and ending at time t5. Time scale\n * is arbitrary.\n *\n * @throws Error\n * @param {Number} r1 - right ascension Coordinate 1\n * @param {Number} d1 - declination Coordinate 1\n * @param {Number} r2 - right ascension Coordinate 2\n * @param {Number} d2 - declination Coordinate 2\n * @param {Number[]} r3 - right ascension Coordinate 3\n * @param {Number[]} d3 - declination Coordinate 3\n * @param {Number} t1 - time in Julian Days\n * @param {Number} t5 - time in Julian Days\n * @returns {Number} time of alignment in Julian Days\n */\nfunction time (r1, d1, r2, d2, r3, d3, t1, t5) { // (r1, d1, r2, d2 float64, r3, d3 []float64, t1, t5 float64) (float64, error)\n if (r3.length !== 5 || d3.length !== 5) {\n throw new Error('r3, d3 must be length 5')\n }\n const gc = new Array(5);\n r3.forEach((r3i, i) => {\n // (19.1) p. 121\n gc[i] = Math.tan(d1) * Math.sin(r2 - r3i) +\n Math.tan(d2) * Math.sin(r3i - r1) +\n Math.tan(d3[i]) * Math.sin(r1 - r2);\n });\n const l5 = new interpolation[\"default\"].Len5(t1, t5, gc);\n return l5.zero(false)\n}\n\n/**\n * Angle returns the angle between great circles defined by three points.\n *\n * Coordinates may be right ascensions and declinations or longitudes and\n * latitudes. If r1, d1, r2, d2 defines one line and r2, d2, r3, d3 defines\n * another, the result is the angle between the two lines.\n *\n * Algorithm by Meeus.\n */\nfunction angle (r1, d1, r2, d2, r3, d3) { // (r1, d1, r2, d2, r3, d3 float64) float64\n const [sd2, cd2] = base[\"default\"].sincos(d2);\n const [sr21, cr21] = base[\"default\"].sincos(r2 - r1);\n const [sr32, cr32] = base[\"default\"].sincos(r3 - r2);\n const C1 = Math.atan2(sr21, cd2 * Math.tan(d1) - sd2 * cr21);\n const C2 = Math.atan2(sr32, cd2 * Math.tan(d3) - sd2 * cr32);\n return C1 + C2\n}\n\n/**\n * Error returns an error angle of three nearly co-linear points.\n *\n * For the line defined by r1, d1, r2, d2, the result is the anglular distance\n * between that line and r0, d0.\n *\n * Algorithm by Meeus.\n */\nfunction error (r1, d1, r2, d2, r0, d0) { // (r1, d1, r2, d2, r0, d0 float64) float64\n const [sr1, cr1] = base[\"default\"].sincos(r1);\n const [sd1, cd1] = base[\"default\"].sincos(d1);\n const [sr2, cr2] = base[\"default\"].sincos(r2);\n const [sd2, cd2] = base[\"default\"].sincos(d2);\n const X1 = cd1 * cr1;\n const X2 = cd2 * cr2;\n const Y1 = cd1 * sr1;\n const Y2 = cd2 * sr2;\n const Z1 = sd1;\n const Z2 = sd2;\n const A = Y1 * Z2 - Z1 * Y2;\n const B = Z1 * X2 - X1 * Z2;\n const C = X1 * Y2 - Y1 * X2;\n const m = Math.tan(r0);\n const n = Math.tan(d0) / Math.cos(r0);\n return Math.asin((A + B * m + C * n) /\n (Math.sqrt(A * A + B * B + C * C) * Math.sqrt(1 + m * m + n * n)))\n}\n\n/**\n * AngleError returns both an angle as in the function Angle, and an error\n * as in the function Error.\n *\n * The algorithm is by B. Pessens.\n *\n * @returns {Number[]} [\u03C8, \u03C9]\n * {Number} \u03C8 - angle between great circles defined by three points.\n * {Number} \u03C9 - error angle of three nearly co-linear points\n */\nfunction angleError (r1, d1, r2, d2, r3, d3) {\n const [sr1, cr1] = base[\"default\"].sincos(r1);\n const [c1, cd1] = base[\"default\"].sincos(d1);\n const [sr2, cr2] = base[\"default\"].sincos(r2);\n const [c2, cd2] = base[\"default\"].sincos(d2);\n const [sr3, cr3] = base[\"default\"].sincos(r3);\n const [c3, cd3] = base[\"default\"].sincos(d3);\n const a1 = cd1 * cr1;\n const a2 = cd2 * cr2;\n const a3 = cd3 * cr3;\n const b1 = cd1 * sr1;\n const b2 = cd2 * sr2;\n const b3 = cd3 * sr3;\n const l1 = b1 * c2 - b2 * c1;\n const l2 = b2 * c3 - b3 * c2;\n const l3 = b1 * c3 - b3 * c1;\n const m1 = c1 * a2 - c2 * a1;\n const m2 = c2 * a3 - c3 * a2;\n const m3 = c1 * a3 - c3 * a1;\n const n1 = a1 * b2 - a2 * b1;\n const n2 = a2 * b3 - a3 * b2;\n const n3 = a1 * b3 - a3 * b1;\n const \u03C8 = Math.acos((l1 * l2 + m1 * m2 + n1 * n2) /\n (Math.sqrt(l1 * l1 + m1 * m1 + n1 * n1) * Math.sqrt(l2 * l2 + m2 * m2 + n2 * n2)));\n const \u03C9 = Math.asin((a2 * l3 + b2 * m3 + c2 * n3) /\n (Math.sqrt(a2 * a2 + b2 * b2 + c2 * c2) * Math.sqrt(l3 * l3 + m3 * m3 + n3 * n3)));\n return [\u03C8, \u03C9]\n}\n\nvar line = {\n time,\n angle,\n error,\n angleError\n};\n\nexports.angle = angle;\nexports.angleError = angleError;\nexports[\"default\"] = line;\nexports.error = error;\nexports.time = time;\n", "'use strict';\n\nObject.defineProperty(exports, '__esModule', { value: true });\n\nvar base = require('./base.cjs');\n\n/**\n * @copyright 2013 Sonia Keys\n * @copyright 2016 commenthol\n * @license MIT\n * @module nearparabolic\n */\n\n/**\n * Elements holds orbital elements for near-parabolic orbits.\n */\nclass Elements {\n /**\n * @param {Number} timeP - time of Perihelion, T\n * @param {Number} pDis - Perihelion distance, q\n * @param {Number} ecc - eccentricity, e\n */\n constructor (timeP, pDis, ecc) {\n this.timeP = timeP;\n this.pDis = pDis;\n this.ecc = ecc;\n }\n\n /**\n * AnomalyDistance returns true anomaly and distance for near-parabolic orbits.\n *\n * True anomaly \u03BD returned in radians. Distance r returned in AU.\n * An error is returned if the algorithm fails to converge.\n */\n anomalyDistance (jde) {\n // fairly literal translation of code on p. 246\n const q1 = base[\"default\"].K * Math.sqrt((1 + this.ecc) / this.pDis) / (2 * this.pDis); // line 20\n const g = (1 - this.ecc) / (1 + this.ecc); // line 20\n\n const t = jde - this.timeP; // line 22\n if (t === 0) { // line 24\n return { ano: 0, dist: this.pDis, err: null }\n }\n const d1 = 1e4;\n const d = 1e-9; // line 14\n const q2 = q1 * t; // line 28\n let s = 2.0 / (3 * Math.abs(q2)); // line 30\n s = 2 / Math.tan(2 * Math.atan(Math.cbrt(Math.tan(Math.atan(s) / 2))));\n if (t < 0) { // line 34\n s = -s;\n }\n if (this.ecc !== 1) { // line 36\n let l = 0; // line 38\n for (;;) {\n const s0 = s; // line 40\n let z = 1.0;\n const y = s * s;\n let g1 = -y * s;\n let q3 = q2 + 2 * g * s * y / 3; // line 42\n for (;;) {\n z += 1; // line 44\n g1 = -g1 * g * y; // line 46\n const z1 = (z - (z + 1) * g) / (2 * z + 1); // line 48\n const f = z1 * g1; // line 50\n q3 += f; // line 52\n if (z > 50 || Math.abs(f) > d1) { // line 54\n return {\n err: new Error('No convergence')\n }\n }\n if (Math.abs(f) <= d) { // line 56\n break\n }\n }\n l++; // line 58\n if (l > 50) {\n return {\n err: new Error('No convergence')\n }\n }\n for (;;) {\n const s1 = s; // line 60\n s = (2 * s * s * s / 3 + q3) / (s * s + 1);\n if (Math.abs(s - s1) <= d) { // line 62\n break\n }\n }\n if (Math.abs(s - s0) <= d) { // line 64\n break\n }\n }\n }\n let \u03BD = 2 * Math.atan(s); // line 66\n const r = this.pDis * (1 + this.ecc) / (1 + this.ecc * Math.cos(\u03BD)); // line 68\n if (\u03BD < 0) { // line 70\n \u03BD += 2 * Math.PI;\n }\n return {\n ano: \u03BD,\n dist: r,\n err: null\n }\n }\n}\n\nvar nearparabolic = {\n Elements\n};\n\nexports.Elements = Elements;\nexports[\"default\"] = nearparabolic;\n", "'use strict';\n\nObject.defineProperty(exports, '__esModule', { value: true });\n\nvar base = require('./base.cjs');\n\n/**\n * @copyright 2013 Sonia Keys\n * @copyright 2016 commenthol\n * @license MIT\n * @module node\n */\n\n/**\n * EllipticAscending computes time and distance of passage through the ascending node of a body in an elliptical orbit.\n *\n * Argument axis is semimajor axis in AU, ecc is eccentricity, argP is argument\n * of perihelion in radians, timeP is time of perihelion as a jd.\n *\n * Result is jde of the event and distance from the sun in AU.\n */\nfunction ellipticAscending (axis, ecc, argP, timeP) { // (axis, ecc, argP, timeP float64) (jde, r float64)\n return el(-argP, axis, ecc, timeP)\n}\n\n/**\n * EllipticAscending computes time and distance of passage through the descending node of a body in an elliptical orbit.\n *\n * Argument axis is semimajor axis in AU, ecc is eccentricity, argP is argument\n * of perihelion in radians, timeP is time of perihelion as a jd.\n *\n * Result is jde of the event and distance from the sun in AU.\n */\nfunction ellipticDescending (axis, ecc, argP, timeP) { // (axis, ecc, argP, timeP float64) (jde, r float64)\n return el(Math.PI - argP, axis, ecc, timeP)\n}\n\nfunction el (\u03BD, axis, ecc, timeP) { // (\u03BD, axis, ecc, timeP float64) (jde, r float64)\n const E = 2 * Math.atan(Math.sqrt((1 - ecc) / (1 + ecc)) * Math.tan(\u03BD * 0.5));\n const [sE, cE] = base[\"default\"].sincos(E);\n const M = E - ecc * sE;\n const n = base[\"default\"].K / axis / Math.sqrt(axis);\n const jde = timeP + M / n;\n const r = axis * (1 - ecc * cE);\n return [jde, r]\n}\n\n/**\n * ParabolicAscending computes time and distance of passage through the ascending node of a body in a parabolic orbit.\n *\n * Argument q is perihelion distance in AU, argP is argument of perihelion\n * in radians, timeP is time of perihelion as a jd.\n *\n * Result is jde of the event and distance from the sun in AU.\n */\nfunction parabolicAscending (q, argP, timeP) { // (q, argP, timeP float64) (jde, r float64)\n return pa(-argP, q, timeP)\n}\n\n/**\n * ParabolicDescending computes time and distance of passage through the descending node of a body in a parabolic orbit.\n *\n * Argument q is perihelion distance in AU, argP is argument of perihelion\n * in radians, timeP is time of perihelion as a jd.\n *\n * Result is jde of the event and distance from the sun in AU.\n */\nfunction parabolicDescending (q, argP, timeP) { // (q, argP, timeP float64) (jde, r float64)\n return pa(Math.PI - argP, q, timeP)\n}\n\nfunction pa (\u03BD, q, timeP) { // (\u03BD, q, timeP float64) (jde, r float64)\n const s = Math.tan(\u03BD * 0.5);\n const jde = timeP + 27.403895 * s * (s * s + 3) * q * Math.sqrt(q);\n const r = q * (1 + s * s);\n return [jde, r]\n}\n\nvar node = {\n ellipticAscending,\n ellipticDescending,\n el,\n parabolicAscending,\n parabolicDescending,\n pa\n};\n\nexports[\"default\"] = node;\nexports.el = el;\nexports.ellipticAscending = ellipticAscending;\nexports.ellipticDescending = ellipticDescending;\nexports.pa = pa;\nexports.parabolicAscending = parabolicAscending;\nexports.parabolicDescending = parabolicDescending;\n", "'use strict';\n\nObject.defineProperty(exports, '__esModule', { value: true });\n\nvar base = require('./base.cjs');\nvar coord = require('./coord.cjs');\nvar illum = require('./illum.cjs');\nvar nutation = require('./nutation.cjs');\nvar planetposition = require('./planetposition.cjs');\n\n/**\n * @copyright 2013 Sonia Keys\n * @copyright 2016 commenthol\n * @license MIT\n * @module mars\n */\n\n/**\n * Physical computes quantities for physical observations of Mars.\n *\n * Results:\n * DE planetocentric declination of the Earth.\n * DS planetocentric declination of the Sun.\n * \u03C9 Areographic longitude of the central meridian, as seen from Earth.\n * P Geocentric position angle of Mars' northern rotation pole.\n * Q Position angle of greatest defect of illumination.\n * d Apparent diameter of Mars.\n * k Illuminated fraction of the disk.\n * q Greatest defect of illumination.\n *\n * All angular results (all results except k) are in radians.\n *\n * @param {number} jde - Julian ephemeris day\n * @param {Planet} earth\n * @param {Planet} mars\n */\nfunction physical (jde, earth, mars) { // (jde float64, earth, mars *pp.V87Planet) (DE, DS, \u03C9, P, Q, d, k, q float64)\n // Step 1.0\n const T = base[\"default\"].J2000Century(jde);\n const p = Math.PI / 180;\n // (42.1) p. 288\n let \u03BB0 = 352.9065 * p + 1.1733 * p * T;\n const \u03B20 = 63.2818 * p - 0.00394 * p * T;\n // Step 2.0\n const earthPos = earth.position(jde);\n const R = earthPos.range;\n const fk5 = planetposition[\"default\"].toFK5(earthPos.lon, earthPos.lat, jde);\n const [l0, b0] = [fk5.lon, fk5.lat];\n // Steps 3, 4.0\n const [sl0, cl0] = base[\"default\"].sincos(l0);\n const sb0 = Math.sin(b0);\n let \u0394 = 0.5; // surely better than 0.0\n let \u03C4 = base[\"default\"].lightTime(\u0394);\n let l = 0;\n let b = 0;\n let r = 0;\n let x = 0;\n let y = 0;\n let z = 0;\n\n function f () {\n const marsPos = mars.position(jde - \u03C4);\n r = marsPos.range;\n const fk5 = planetposition[\"default\"].toFK5(marsPos.lon, marsPos.lat, jde);\n l = fk5.lon;\n b = fk5.lat;\n const [sb, cb] = base[\"default\"].sincos(b);\n const [sl, cl] = base[\"default\"].sincos(l);\n // (42.2) p. 289\n x = r * cb * cl - R * cl0;\n y = r * cb * sl - R * sl0;\n z = r * sb - R * sb0;\n // (42.3) p. 289\n \u0394 = Math.sqrt(x * x + y * y + z * z);\n \u03C4 = base[\"default\"].lightTime(\u0394);\n }\n\n f();\n f();\n // Step 5.0\n let \u03BB = Math.atan2(y, x);\n let \u03B2 = Math.atan(z / Math.hypot(x, y));\n // Step 6.0\n const [s\u03B20, c\u03B20] = base[\"default\"].sincos(\u03B20);\n const [s\u03B2, c\u03B2] = base[\"default\"].sincos(\u03B2);\n const DE = Math.asin(-s\u03B20 * s\u03B2 - c\u03B20 * c\u03B2 * Math.cos(\u03BB0 - \u03BB));\n // Step 7.0\n const N = 49.5581 * p + 0.7721 * p * T;\n const l\u02B9 = l - 0.00697 * p / r;\n const b\u02B9 = b - 0.000225 * p * Math.cos(l - N) / r;\n // Step 8.0\n const [sb\u02B9, cb\u02B9] = base[\"default\"].sincos(b\u02B9);\n const DS = Math.asin(-s\u03B20 * sb\u02B9 - c\u03B20 * cb\u02B9 * Math.cos(\u03BB0 - l\u02B9));\n // Step 9.0\n const W = 11.504 * p + 350.89200025 * p * (jde - \u03C4 - 2433282.5);\n // Step 10.0\n const \u03B50 = nutation[\"default\"].meanObliquity(jde);\n const [s\u03B50, c\u03B50] = base[\"default\"].sincos(\u03B50);\n let eq = new coord[\"default\"].Ecliptic(\u03BB0, \u03B20).toEquatorial(\u03B50);\n const [\u03B10, \u03B40] = [eq.ra, eq.dec];\n // Step 11.0\n const u = y * c\u03B50 - z * s\u03B50;\n const v = y * s\u03B50 + z * c\u03B50;\n const \u03B1 = Math.atan2(u, x);\n const \u03B4 = Math.atan(v / Math.hypot(x, u));\n const [s\u03B4, c\u03B4] = base[\"default\"].sincos(\u03B4);\n const [s\u03B40, c\u03B40] = base[\"default\"].sincos(\u03B40);\n const [s\u03B10\u03B1, c\u03B10\u03B1] = base[\"default\"].sincos(\u03B10 - \u03B1);\n const \u03B6 = Math.atan2(s\u03B40 * c\u03B4 * c\u03B10\u03B1 - s\u03B4 * c\u03B40, c\u03B4 * s\u03B10\u03B1);\n // Step 12.0\n const \u03C9 = base[\"default\"].pmod(W - \u03B6, 2 * Math.PI);\n // Step 13.0\n const [\u0394\u03C8, \u0394\u03B5] = nutation[\"default\"].nutation(jde);\n // Step 14.0\n const [sl0\u03BB, cl0\u03BB] = base[\"default\"].sincos(l0 - \u03BB);\n \u03BB += 0.005693 * p * cl0\u03BB / c\u03B2;\n \u03B2 += 0.005693 * p * sl0\u03BB * s\u03B2;\n // Step 15.0\n \u03BB0 += \u0394\u03C8;\n \u03BB += \u0394\u03C8;\n const \u03B5 = \u03B50 + \u0394\u03B5;\n // Step 16.0\n const [s\u03B5, c\u03B5] = base[\"default\"].sincos(\u03B5);\n eq = new coord[\"default\"].Ecliptic(\u03BB0, \u03B20).toEquatorial(\u03B5);\n const [\u03B10\u02B9, \u03B40\u02B9] = [eq.ra, eq.dec];\n eq = new coord[\"default\"].Ecliptic(\u03BB, \u03B2).toEquatorial(\u03B5);\n const [\u03B1\u02B9, \u03B4\u02B9] = [eq.ra, eq.dec];\n // Step 17.0\n const [s\u03B40\u02B9, c\u03B40\u02B9] = base[\"default\"].sincos(\u03B40\u02B9);\n const [s\u03B4\u02B9, c\u03B4\u02B9] = base[\"default\"].sincos(\u03B4\u02B9);\n const [s\u03B10\u02B9\u03B1\u02B9, c\u03B10\u02B9\u03B1\u02B9] = base[\"default\"].sincos(\u03B10\u02B9 - \u03B1\u02B9);\n // (42.4) p. 290\n let P = Math.atan2(c\u03B40\u02B9 * s\u03B10\u02B9\u03B1\u02B9, s\u03B40\u02B9 * c\u03B4\u02B9 - c\u03B40\u02B9 * s\u03B4\u02B9 * c\u03B10\u02B9\u03B1\u02B9);\n if (P < 0) {\n P += 2 * Math.PI;\n }\n // Step 18.0\n const s = l0 + Math.PI;\n const [ss, cs] = base[\"default\"].sincos(s);\n const \u03B1s = Math.atan2(c\u03B5 * ss, cs);\n const \u03B4s = Math.asin(s\u03B5 * ss);\n const [s\u03B4s, c\u03B4s] = base[\"default\"].sincos(\u03B4s);\n const [s\u03B1s\u03B1, c\u03B1s\u03B1] = base[\"default\"].sincos(\u03B1s - \u03B1);\n const \u03C7 = Math.atan2(c\u03B4s * s\u03B1s\u03B1, s\u03B4s * c\u03B4 - c\u03B4s * s\u03B4 * c\u03B1s\u03B1);\n const Q = \u03C7 + Math.PI;\n // Step 19.0\n const d = 9.36 / 60 / 60 * Math.PI / 180 / \u0394;\n const k = illum[\"default\"].fraction(r, \u0394, R);\n const q = (1 - k) * d;\n return [DE, DS, \u03C9, P, Q, d, k, q]\n}\n\nvar mars = {\n physical\n};\n\nexports[\"default\"] = mars;\nexports.physical = physical;\n", "'use strict';\n\nObject.defineProperty(exports, '__esModule', { value: true });\n\nvar base = require('./base.cjs');\n\n/**\n * @copyright 2013 Sonia Keys\n * @copyright 2016 commenthol\n * @license MIT\n * @module moonposition\n */\nconst { asin, sin } = Math;\nconst D2R = Math.PI / 180;\n\nconst EARTH_RADIUS = 6378.137; // km\n\n/**\n * parallax returns equatorial horizontal parallax of the Moon.\n *\n * @param {Number} distance - distance between centers of the Earth and Moon, in km.\n * @returns {Number} Result in radians.\n */\nfunction parallax (distance) {\n // p. 337\n return asin(EARTH_RADIUS / distance)\n}\n\nfunction dmf (T) {\n const d = base[\"default\"].horner(T, 297.8501921 * D2R, 445267.1114034 * D2R, -0.0018819 * D2R, D2R / 545868, -D2R / 113065000);\n const m = base[\"default\"].horner(T, 357.5291092 * D2R, 35999.0502909 * D2R, -0.0001536 * D2R, D2R / 24490000);\n const m_ = base[\"default\"].horner(T, 134.9633964 * D2R, 477198.8675055 * D2R,\n 0.0087414 * D2R, D2R / 69699, -D2R / 14712000);\n const f = base[\"default\"].horner(T, 93.272095 * D2R, 483202.0175233 * D2R, -0.0036539 * D2R, -D2R / 3526000, D2R / 863310000);\n return [d, m, m_, f]\n}\n\n/**\n * position returns geocentric location of the Moon.\n *\n * Results are referenced to mean equinox of date and do not include\n * the effect of nutation.\n *\n * @param {number} jde - Julian ephemeris day\n * @returns {Coord}\n * {number} lon - Geocentric longitude \u03BB, in radians.\n * {number} lat - Geocentric latitude \u03B2, in radians.\n * {number} range - Distance \u0394 between centers of the Earth and Moon, in km.\n */\nfunction position (jde) {\n const T = base[\"default\"].J2000Century(jde);\n const l_ = base[\"default\"].horner(T, 218.3164477 * D2R, 481267.88123421 * D2R, -0.0015786 * D2R, D2R / 538841, -D2R / 65194000);\n const [d, m, m_, f] = dmf(T);\n const a1 = 119.75 * D2R + 131.849 * D2R * T;\n const a2 = 53.09 * D2R + 479264.29 * D2R * T;\n const a3 = 313.45 * D2R + 481266.484 * D2R * T;\n const e = base[\"default\"].horner(T, 1, -0.002516, -0.0000074);\n const e2 = e * e;\n let \u03A3l = 3958 * sin(a1) + 1962 * sin(l_ - f) + 318 * sin(a2);\n let \u03A3r = 0.0;\n let \u03A3b = -2235 * sin(l_) + 382 * sin(a3) + 175 * sin(a1 - f) +\n 175 * sin(a1 + f) + 127 * sin(l_ - m_) - 115 * sin(l_ + m_);\n ta.forEach((r) => {\n const [sina, cosa] = base[\"default\"].sincos(d * r.d + m * r.m + m_ * r.m_ + f * r.f);\n switch (r.m) {\n case 0:\n \u03A3l += r.\u03A3l * sina;\n \u03A3r += r.\u03A3r * cosa;\n break\n case -1:\n case 1:\n \u03A3l += r.\u03A3l * sina * e;\n \u03A3r += r.\u03A3r * cosa * e;\n break\n case -2:\n case 2:\n \u03A3l += r.\u03A3l * sina * e2;\n \u03A3r += r.\u03A3r * cosa * e2;\n break\n }\n });\n\n tb.forEach((r) => {\n const sb = sin(d * r.d + m * r.m + m_ * r.m_ + f * r.f);\n switch (r.m) {\n case 0:\n \u03A3b += r.\u03A3b * sb;\n break\n case -1:\n case 1:\n \u03A3b += r.\u03A3b * sb * e;\n break\n case -2:\n case 2:\n \u03A3b += r.\u03A3b * sb * e2;\n break\n }\n });\n const lon = base[\"default\"].pmod(l_, 2 * Math.PI) + \u03A3l * 1e-6 * D2R;\n const lat = \u03A3b * 1e-6 * D2R;\n const range = 385000.56 + \u03A3r * 1e-3;\n return new base[\"default\"].Coord(lon, lat, range)\n}\n\nconst ta = (function () {\n const ta = [\n [0, 0, 1, 0, 6288774, -20905355],\n [2, 0, -1, 0, 1274027, -3699111],\n [2, 0, 0, 0, 658314, -2955968],\n [0, 0, 2, 0, 213618, -569925],\n\n [0, 1, 0, 0, -185116, 48888],\n [0, 0, 0, 2, -114332, -3149],\n [2, 0, -2, 0, 58793, 246158],\n [2, -1, -1, 0, 57066, -152138],\n\n [2, 0, 1, 0, 53322, -170733],\n [2, -1, 0, 0, 45758, -204586],\n [0, 1, -1, 0, -40923, -129620],\n [1, 0, 0, 0, -34720, 108743],\n\n [0, 1, 1, 0, -30383, 104755],\n [2, 0, 0, -2, 15327, 10321],\n [0, 0, 1, 2, -12528, 0],\n [0, 0, 1, -2, 10980, 79661],\n\n [4, 0, -1, 0, 10675, -34782],\n [0, 0, 3, 0, 10034, -23210],\n [4, 0, -2, 0, 8548, -21636],\n [2, 1, -1, 0, -7888, 24208],\n\n [2, 1, 0, 0, -6766, 30824],\n [1, 0, -1, 0, -5163, -8379],\n [1, 1, 0, 0, 4987, -16675],\n [2, -1, 1, 0, 4036, -12831],\n\n [2, 0, 2, 0, 3994, -10445],\n [4, 0, 0, 0, 3861, -11650],\n [2, 0, -3, 0, 3665, 14403],\n [0, 1, -2, 0, -2689, -7003],\n\n [2, 0, -1, 2, -2602, 0],\n [2, -1, -2, 0, 2390, 10056],\n [1, 0, 1, 0, -2348, 6322],\n [2, -2, 0, 0, 2236, -9884],\n\n [0, 1, 2, 0, -2120, 5751],\n [0, 2, 0, 0, -2069, 0],\n [2, -2, -1, 0, 2048, -4950],\n [2, 0, 1, -2, -1773, 4130],\n\n [2, 0, 0, 2, -1595, 0],\n [4, -1, -1, 0, 1215, -3958],\n [0, 0, 2, 2, -1110, 0],\n [3, 0, -1, 0, -892, 3258],\n\n [2, 1, 1, 0, -810, 2616],\n [4, -1, -2, 0, 759, -1897],\n [0, 2, -1, 0, -713, -2117],\n [2, 2, -1, 0, -700, 2354],\n\n [2, 1, -2, 0, 691, 0],\n [2, -1, 0, -2, 596, 0],\n [4, 0, 1, 0, 549, -1423],\n [0, 0, 4, 0, 537, -1117],\n\n [4, -1, 0, 0, 520, -1571],\n [1, 0, -2, 0, -487, -1739],\n [2, 1, 0, -2, -399, 0],\n [0, 0, 2, -2, -381, -4421],\n\n [1, 1, 1, 0, 351, 0],\n [3, 0, -2, 0, -340, 0],\n [4, 0, -3, 0, 330, 0],\n [2, -1, 2, 0, 327, 0],\n\n [0, 2, 1, 0, -323, 1165],\n [1, 1, -1, 0, 299, 0],\n [2, 0, 3, 0, 294, 0],\n [2, 0, -1, -2, 0, 8752]\n ];\n return ta.map((row) => {\n const o = {};\n const vals = ['d', 'm', 'm_', 'f', '\u03A3l', '\u03A3r'];\n vals.forEach((D2R, i) => {\n o[D2R] = row[i];\n });\n return o\n })\n})();\n\nconst tb = (function () {\n const tb = [\n [0, 0, 0, 1, 5128122],\n [0, 0, 1, 1, 280602],\n [0, 0, 1, -1, 277693],\n [2, 0, 0, -1, 173237],\n\n [2, 0, -1, 1, 55413],\n [2, 0, -1, -1, 46271],\n [2, 0, 0, 1, 32573],\n [0, 0, 2, 1, 17198],\n\n [2, 0, 1, -1, 9266],\n [0, 0, 2, -1, 8822],\n [2, -1, 0, -1, 8216],\n [2, 0, -2, -1, 4324],\n\n [2, 0, 1, 1, 4200],\n [2, 1, 0, -1, -3359],\n [2, -1, -1, 1, 2463],\n [2, -1, 0, 1, 2211],\n\n [2, -1, -1, -1, 2065],\n [0, 1, -1, -1, -1870],\n [4, 0, -1, -1, 1828],\n [0, 1, 0, 1, -1794],\n\n [0, 0, 0, 3, -1749],\n [0, 1, -1, 1, -1565],\n [1, 0, 0, 1, -1491],\n [0, 1, 1, 1, -1475],\n\n [0, 1, 1, -1, -1410],\n [0, 1, 0, -1, -1344],\n [1, 0, 0, -1, -1335],\n [0, 0, 3, 1, 1107],\n\n [4, 0, 0, -1, 1021],\n [4, 0, -1, 1, 833],\n\n [0, 0, 1, -3, 777],\n [4, 0, -2, 1, 671],\n [2, 0, 0, -3, 607],\n [2, 0, 2, -1, 596],\n\n [2, -1, 1, -1, 491],\n [2, 0, -2, 1, -451],\n [0, 0, 3, -1, 439],\n [2, 0, 2, 1, 422],\n\n [2, 0, -3, -1, 421],\n [2, 1, -1, 1, -366],\n [2, 1, 0, 1, -351],\n [4, 0, 0, 1, 331],\n\n [2, -1, 1, 1, 315],\n [2, -2, 0, -1, 302],\n [0, 0, 1, 3, -283],\n [2, 1, 1, -1, -229],\n\n [1, 1, 0, -1, 223],\n [1, 1, 0, 1, 223],\n [0, 1, -2, -1, -220],\n [2, 1, -1, -1, -220],\n\n [1, 0, 1, 1, -185],\n [2, -1, -2, -1, 181],\n [0, 1, 2, 1, -177],\n [4, 0, -2, -1, 176],\n\n [4, -1, -1, -1, 166],\n [1, 0, 1, -1, -164],\n [4, 0, 1, -1, 132],\n [1, 0, -1, -1, -119],\n\n [4, -1, 0, -1, 115],\n [2, -2, 0, 1, 107]\n ];\n return tb.map((row) => {\n const o = {};\n const vals = ['d', 'm', 'm_', 'f', '\u03A3b'];\n vals.forEach((D2R, i) => {\n o[D2R] = row[i];\n });\n return o\n })\n})();\n\n/**\n * Node returns longitude of the mean ascending node of the lunar orbit.\n *\n * @param {number} jde - Julian ephemeris day\n * @returns result in radians.\n */\nfunction node (jde) {\n return base[\"default\"].pmod(\n base[\"default\"].horner(\n base[\"default\"].J2000Century(jde),\n 125.0445479 * D2R,\n -1934.1362891 * D2R,\n 0.0020754 * D2R,\n D2R / 467441,\n -D2R / 60616000\n ), 2 * Math.PI\n )\n}\n\n/**\n * perigee returns longitude of perigee of the lunar orbit.\n *\n * @param {number} jde - Julian ephemeris day\n * @returns result in radians.\n */\nfunction perigee (jde) {\n return base[\"default\"].pmod(\n base[\"default\"].horner(\n base[\"default\"].J2000Century(jde),\n 83.3532465 * D2R,\n 4069.0137287 * D2R,\n -0.01032 * D2R,\n -D2R / 80053,\n D2R / 18999000\n ), 2 * Math.PI\n )\n}\n\n/**\n * trueNode returns longitude of the true ascending node.\n *\n * That is, the node of the instantaneous lunar orbit.\n *\n * @param {number} jde - Julian ephemeris day\n * @returns result in radians.\n */\nfunction trueNode (jde) {\n const [d, m, m_, f] = dmf(base[\"default\"].J2000Century(jde));\n return node(jde) +\n -1.4979 * D2R * sin(2 * (d - f)) +\n -0.15 * D2R * sin(m) +\n -0.1226 * D2R * sin(2 * d) +\n 0.1176 * D2R * sin(2 * f) +\n -0.0801 * D2R * sin(2 * (m_ - f))\n}\n\nvar moonposition = {\n parallax,\n position,\n node,\n perigee,\n trueNode\n};\n\nexports[\"default\"] = moonposition;\nexports.node = node;\nexports.parallax = parallax;\nexports.perigee = perigee;\nexports.position = position;\nexports.trueNode = trueNode;\n", "'use strict';\n\nObject.defineProperty(exports, '__esModule', { value: true });\n\nvar base = require('./base.cjs');\nvar coord = require('./coord.cjs');\nvar moonposition = require('./moonposition.cjs');\nvar nutation = require('./nutation.cjs');\nvar solar = require('./solar.cjs');\n\n/**\n * @copyright 2013 Sonia Keys\n * @copyright 2016 commenthol\n * @license MIT\n * @module moon\n */\n\nconst { sin, cos, asin, atan2 } = Math;\nconst D2R = Math.PI / 180;\nconst _I = 1.54242 * D2R; // IAU value of inclination of mean lunar equator\n\nconst [sI, cI] = base[\"default\"].sincos(_I);\n\n/**\n * Physical returns quantities useful for physical observation of the Moon.\n *\n * Returned l, b are librations in selenographic longitude and latitude.\n * They represent combined optical and physical librations. Topocentric\n * librations are not considered.\n *\n * Returned P is the the position angle of the Moon's axis of rotation.\n *\n * Returned l0, b0 are the selenographic coordinates of the Sun.\n *\n * Returned values all in radians.\n\n * @param {number} jde - Julian ephemeris day\n * @param {Planet} earth - VSOP87 Planet Earth\n * @return {Array}\n * {base.Coord} cMoon - selenographic longitude, latitude of the Moon\n * {number} P - position angle of the Moon's axis of rotation\n * {base.Coord} cSun - selenographic longitude, latitude of the Sun.\n */\nfunction physical (jde, earth) {\n const { lon, lat, range } = moonposition[\"default\"].position(jde); // (\u03BB without nutation)\n // [\u03BB, \u03B2, \u0394]\n const m = new Moon(jde);\n const [l, b] = m.lib(lon, lat);\n const P = m.pa(lon, lat, b);\n const [l0, b0] = m.sun(lon, lat, range, earth);\n const cMoon = new base[\"default\"].Coord(l, b);\n const cSun = new base[\"default\"].Coord(l0, b0);\n return [cMoon, P, cSun]\n}\n\n/**\n * Quantities computed for a jde and used in computing return values of\n * physical(). Computations are broken into several methods to organize\n * the code.\n */\nclass Moon {\n constructor (jde) {\n this.jde = jde;\n // \u0394\u03C8, F, \u03A9, p. 372.0\n const [\u0394\u03C8, \u0394\u03B5] = nutation[\"default\"].nutation(jde);\n this.\u0394\u03C8 = \u0394\u03C8;\n const T = base[\"default\"].J2000Century(jde);\n const F = this.F = base[\"default\"].horner(T, 93.272095 * D2R, 483202.0175233 * D2R, -0.0036539 * D2R, -D2R / 3526000, D2R / 863310000);\n this.\u03A9 = base[\"default\"].horner(T, 125.0445479 * D2R, -1934.1362891 * D2R, 0.0020754 * D2R,\n D2R / 467441, -D2R / 60616000);\n // true ecliptic\n this.\u03B5 = nutation[\"default\"].meanObliquity(jde) + \u0394\u03B5;\n this.s\u03B5 = sin(this.\u03B5);\n this.c\u03B5 = cos(this.\u03B5);\n // \u03C1, \u03C3, \u03C4, p. 372,373\n const D = base[\"default\"].horner(T, 297.8501921 * D2R, 445267.1114034 * D2R, -0.0018819 * D2R, D2R / 545868, -D2R / 113065000);\n const M = base[\"default\"].horner(T, 357.5291092 * D2R, 35999.0502909 * D2R, -0.0001536 * D2R, D2R / 24490000);\n const M_ = base[\"default\"].horner(T, 134.9633964 * D2R, 477198.8675055 * D2R,\n 0.0087414 * D2R, D2R / 69699, -D2R / 14712000);\n const E = base[\"default\"].horner(T, 1, -0.002516, -0.0000074);\n const K1 = 119.75 * D2R + 131.849 * D2R * T;\n const K2 = 72.56 * D2R + 20.186 * D2R * T;\n this.\u03C1 = -0.02752 * D2R * cos(M_) +\n -0.02245 * D2R * sin(F) +\n 0.00684 * D2R * cos(M_ - 2 * F) +\n -0.00293 * D2R * cos(2 * F) +\n -0.00085 * D2R * cos(2 * (F - D)) +\n -0.00054 * D2R * cos(M_ - 2 * D) +\n -0.0002 * D2R * sin(M_ + F) +\n -0.0002 * D2R * cos(M_ + 2 * F) +\n -0.0002 * D2R * cos(M_ - F) +\n 0.00014 * D2R * cos(M_ + 2 * (F - D));\n this.\u03C3 = -0.02816 * D2R * sin(M_) +\n 0.02244 * D2R * cos(F) +\n -0.00682 * D2R * sin(M_ - 2 * F) +\n -0.00279 * D2R * sin(2 * F) +\n -0.00083 * D2R * sin(2 * (F - D)) +\n 0.00069 * D2R * sin(M_ - 2 * D) +\n 0.0004 * D2R * cos(M_ + F) +\n -0.00025 * D2R * sin(2 * M_) +\n -0.00023 * D2R * sin(M_ + 2 * F) +\n 0.0002 * D2R * cos(M_ - F) +\n 0.00019 * D2R * sin(M_ - F) +\n 0.00013 * D2R * sin(M_ + 2 * (F - D)) +\n -0.0001 * D2R * cos(M_ - 3 * F);\n this.\u03C4 = 0.0252 * D2R * sin(M) * E +\n 0.00473 * D2R * sin(2 * (M_ - F)) +\n -0.00467 * D2R * sin(M_) +\n 0.00396 * D2R * sin(K1) +\n 0.00276 * D2R * sin(2 * (M_ - D)) +\n 0.00196 * D2R * sin(this.\u03A9) +\n -0.00183 * D2R * cos(M_ - F) +\n 0.00115 * D2R * sin(M_ - 2 * D) +\n -0.00096 * D2R * sin(M_ - D) +\n 0.00046 * D2R * sin(2 * (F - D)) +\n -0.00039 * D2R * sin(M_ - F) +\n -0.00032 * D2R * sin(M_ - M - D) +\n 0.00027 * D2R * sin(2 * (M_ - D) - M) +\n 0.00023 * D2R * sin(K2) +\n -0.00014 * D2R * sin(2 * D) +\n 0.00014 * D2R * cos(2 * (M_ - F)) +\n -0.00012 * D2R * sin(M_ - 2 * F) +\n -0.00012 * D2R * sin(2 * M_) +\n 0.00011 * D2R * sin(2 * (M_ - M - D));\n }\n\n /**\n * lib() curiously serves for computing both librations and solar coordinates,\n * depending on the coordinates \u03BB, \u03B2 passed in. Quantity A not described in\n * the book, but clearly depends on the \u03BB, \u03B2 of the current context and so\n * does not belong in the moon struct. Instead just return it from optical\n * and pass it along to physical.\n */\n lib (\u03BB, \u03B2) {\n const [l_, b_, A] = this.optical(\u03BB, \u03B2);\n const [l$, b$] = this.physical(A, b_);\n let l = l_ + l$;\n if (l > Math.PI) {\n l -= 2 * Math.PI;\n }\n const b = b_ + b$;\n return [l, b]\n }\n\n optical (\u03BB, \u03B2) {\n // (53.1) p. 372\n const W = \u03BB - this.\u03A9; // (\u03BB without nutation)\n const [sW, cW] = base[\"default\"].sincos(W);\n const [s\u03B2, c\u03B2] = base[\"default\"].sincos(\u03B2);\n const A = atan2(sW * c\u03B2 * cI - s\u03B2 * sI, cW * c\u03B2);\n const l_ = base[\"default\"].pmod(A - this.F, 2 * Math.PI);\n const b_ = asin(-sW * c\u03B2 * sI - s\u03B2 * cI);\n return [l_, b_, A]\n }\n\n physical (A, b_) {\n // (53.2) p. 373\n const [sA, cA] = base[\"default\"].sincos(A);\n const l$ = -this.\u03C4 + (this.\u03C1 * cA + this.\u03C3 * sA) * Math.tan(b_);\n const b$ = this.\u03C3 * cA - this.\u03C1 * sA;\n return [l$, b$]\n }\n\n pa (\u03BB, \u03B2, b) {\n const V = this.\u03A9 + this.\u0394\u03C8 + this.\u03C3 / sI;\n const [sV, cV] = base[\"default\"].sincos(V);\n const [sI\u03C1, cI\u03C1] = base[\"default\"].sincos(_I + this.\u03C1);\n const X = sI\u03C1 * sV;\n const Y = sI\u03C1 * cV * this.c\u03B5 - cI\u03C1 * this.s\u03B5;\n const \u03C9 = Math.atan2(X, Y);\n const ecl = new coord[\"default\"].Ecliptic(\u03BB + this.\u0394\u03C8, \u03B2).toEquatorial(this.\u03B5); // eslint-disable-line no-unused-vars\n let P = asin(Math.hypot(X, Y) * cos(ecl.ra - \u03C9) / cos(b));\n if (P < 0) {\n P += 2 * Math.PI;\n }\n return P\n }\n\n sun (\u03BB, \u03B2, \u0394, earth) {\n const { lon, lat, range } = solar[\"default\"].apparentVSOP87(earth, this.jde); // eslint-disable-line no-unused-vars\n const \u0394R = \u0394 / (range * base[\"default\"].AU);\n const \u03BBH = lon + Math.PI + 57.296 * D2R * \u0394R * cos(\u03B2) * sin(lon - \u03BB);\n const \u03B2H = \u0394R * \u03B2;\n return this.lib(\u03BBH, \u03B2H)\n }\n}\n\n/* commented out for lack of test data\nexport function Topocentric (jde, \u03C1s\u03C6_, \u03C1c\u03C6_, L) { // (jde, \u03C1s\u03C6_, \u03C1c\u03C6_, L float64) (l, b, P float64)\n \u03BB, \u03B2, \u0394 := moonposition.Position(jde) // (\u03BB without nutation)\n \u0394\u03C8, \u0394\u03B5 := nutation.Nutation(jde)\n s\u03B5, c\u03B5 := base.sincos(nutation.MeanObliquity(jde) + \u0394\u03B5)\n \u03B1, \u03B4 := coord.EclToEq(\u03BB+\u0394\u03C8, \u03B2, s\u03B5, c\u03B5)\n \u03B1, \u03B4 = parallax.Topocentric(\u03B1, \u03B4, \u0394/base.AU, \u03C1s\u03C6_, \u03C1c\u03C6_, L, jde)\n \u03BB, \u03B2 = coord.EqToEcl(\u03B1, \u03B4, s\u03B5, c\u03B5)\n const m = newMoon(jde)\n l, b = m.lib(\u03BB, \u03B2)\n P = m.pa(\u03BB, \u03B2, b)\n return\n}\n\nexport function TopocentricCorrections (jde, b, P, \u03C6, \u03B4, H, \u03C0) { // (jde, b, P, \u03C6, \u03B4, H, \u03C0 float64) (\u0394l, \u0394b, \u0394P float64)\n s\u03C6, c\u03C6 := base.sincos(\u03C6)\n sH, cH := base.sincos(H)\n s\u03B4, c\u03B4 := base.sincos(\u03B4)\n const Q = Math.atan(c\u03C6 * sH / (c\u03B4*s\u03C6 - s\u03B4*c\u03C6*cH))\n const z = Math.acos(s\u03B4*s\u03C6 + c\u03B4*c\u03C6*cH)\n const \u03C0_ = \u03C0 * (sin(z) + 0.0084*sin(2*z))\n sQP, cQP := base.sincos(Q - P)\n \u0394l = -\u03C0_ * sQP / cos(b)\n \u0394b = \u03C0_ * cQP\n \u0394P = \u0394l*sin(b+\u0394b) - \u03C0_*sin(Q)*Math.tan(\u03B4)\n return\n}\n*/\n\n/**\n * SunAltitude returns altitude of the Sun above the lunar horizon.\n *\n * @param {Coord} cOnMoon - selenographic longitude and latitude of a site on the Moon\n * @param {Coord} cSun - selenographic coordinates of the Sun (as returned by physical(), for example.)\n * @return altitude in radians.\n */\nfunction sunAltitude (cOnMoon, cSun) { // (\u03B7, \u03B8, l0, b0 float64) float64\n const c0 = Math.PI / 2 - cSun.lon;\n const [sb0, cb0] = base[\"default\"].sincos(cSun.lat);\n const [s\u03B8, c\u03B8] = base[\"default\"].sincos(cOnMoon.lat);\n return asin(sb0 * s\u03B8 + cb0 * c\u03B8 * sin(c0 + cOnMoon.lon))\n}\n\n/**\n * Sunrise returns time of sunrise for a point on the Moon near the given date.\n *\n * @param {Coord} cOnMoon - selenographic longitude and latitude of a site on the Moon\n * @param {Number} jde - Julian ephemeris day\n * @param {Planet} earth - VSOP87 Planet Earth\n * @return time of sunrise as a jde nearest the given jde.\n */\nfunction sunrise (cOnMoon, jde, earth) { // (\u03B7, \u03B8, jde float64, earth *pp.V87Planet) float64\n jde -= srCorr(cOnMoon, jde, earth);\n return jde - srCorr(cOnMoon, jde, earth)\n}\n\n/**\n * Sunset returns time of sunset for a point on the Moon near the given date.\n *\n * @param {Coord} cOnMoon - selenographic longitude and latitude of a site on the Moon\n * @param {Number} jde - Julian ephemeris day\n * @param {Planet} earth - VSOP87 Planet Earth\n * @return time of sunset as a jde nearest the given jde.\n */\nfunction sunset (cOnMoon, jde, earth) { // (\u03B7, \u03B8, jde float64, earth *pp.V87Planet) float64\n jde += srCorr(cOnMoon, jde, earth);\n return jde + srCorr(cOnMoon, jde, earth)\n}\n\n/**\n * @private\n */\nfunction srCorr (cOnMoon, jde, earth) {\n const phy = physical(jde, earth);\n const h = sunAltitude(cOnMoon, phy[2]);\n return h / (12.19075 * D2R * cos(cOnMoon.lat))\n}\n\nconst lunarCoord = (\u03B7, \u03B8) => new base[\"default\"].Coord(\u03B7 * D2R, \u03B8 * D2R);\n/**\n * selenographic coordinates of some lunar features\n * Table 53.A\n */\nconst selenographic = {\n archimedes: lunarCoord(-3.9, 29.7),\n aristarchus: lunarCoord(-47.5, 23.7),\n aristillus: lunarCoord(1.2, 33.9),\n aristoteles: lunarCoord(17.3, 50.1),\n arzachel: lunarCoord(-1.9, -17.7),\n autolycus: lunarCoord(1.5, 30.7),\n billy: lunarCoord(-50, -13.8),\n birt: lunarCoord(-8.5, -22.3),\n campanus: lunarCoord(-27.7, -28),\n censorinus: lunarCoord(32.7, -0.4),\n clavius: lunarCoord(-14, -58),\n copernicus: lunarCoord(-20, 9.7),\n delambre: lunarCoord(17.5, -1.9),\n dionysius: lunarCoord(17.3, 2.8),\n endymion: lunarCoord(56.4, 53.6),\n eratosthenes: lunarCoord(-11.3, 14.5),\n eudoxus: lunarCoord(16.3, 44.3),\n fracastorius: lunarCoord(33.2, -21),\n fraMauro: lunarCoord(-17, -6),\n gassendi: lunarCoord(-39.9, -17.5),\n goclenius: lunarCoord(45, -10.1),\n grimaldi: lunarCoord(-68.5, -5.8),\n harpalus: lunarCoord(-43.4, 52.6),\n horrocks: lunarCoord(5.9, -4),\n kepler: lunarCoord(-38, 8.1),\n langrenus: lunarCoord(60.9, -8.9),\n lansberg: lunarCoord(-26.6, -0.3),\n letronne: lunarCoord(-43, -10),\n macrobius: lunarCoord(46, 21.2),\n manilius: lunarCoord(9.1, 14.5),\n menelaus: lunarCoord(16, 16.3),\n messier: lunarCoord(47.6, -1.9),\n petavius: lunarCoord(61, -25),\n pico: lunarCoord(-8.8, 45.8),\n pitatus: lunarCoord(-13.5, -29.8),\n piton: lunarCoord(-0.8, 40.8),\n plato: lunarCoord(-9.2, 51.4),\n plinius: lunarCoord(23.6, 15.3),\n posidonius: lunarCoord(30, 31.9),\n proclus: lunarCoord(46.9, 16.1),\n ptolemeusA: lunarCoord(-0.8, -8.5),\n pytheas: lunarCoord(-20.6, 20.5),\n reinhold: lunarCoord(-22.8, 3.2),\n riccioli: lunarCoord(-74.3, -3.2),\n schickard: lunarCoord(-54.5, -44),\n schiller: lunarCoord(-39, -52),\n tauruntius: lunarCoord(46.5, 5.6),\n theophilus: lunarCoord(26.5, -11.4),\n timocharis: lunarCoord(-13.1, 26.7),\n tycho: lunarCoord(-11, -43.2),\n vitruvius: lunarCoord(31.3, 17.6),\n walter: lunarCoord(1, -33)\n};\n\nvar moon = {\n physical,\n Moon,\n // Topocentric,\n // TopocentricCorrections,\n sunAltitude,\n sunrise,\n sunset,\n selenographic\n};\n\nexports.Moon = Moon;\nexports[\"default\"] = moon;\nexports.physical = physical;\nexports.selenographic = selenographic;\nexports.sunAltitude = sunAltitude;\nexports.sunrise = sunrise;\nexports.sunset = sunset;\n", "'use strict';\n\nObject.defineProperty(exports, '__esModule', { value: true });\n\nvar base = require('./base.cjs');\n\n/**\n * @copyright 2013 Sonia Keys\n * @copyright 2016 commenthol\n * @license MIT\n * @module moonillum\n */\n\nconst D2R = Math.PI / 180;\n\n/**\n * phaseAngleEquatorial computes the phase angle of the Moon given equatorial coordinates.\n *\n * @param {Coord} cMoon - geocentric right ascension, declination and distance to the Moon\n * @param {Coord} cSun - coordinates and distance of the Sun\n * @returns {number} phase angle of the Moon in radians\n */\nfunction phaseAngleEquatorial (cMoon, cSun) {\n return pa(cMoon.range, cSun.range, cosEq(cMoon.ra, cMoon.dec, cSun.ra, cSun.dec))\n}\n\n/**\n * cos elongation from equatorial coordinates\n * @private\n */\nfunction cosEq (\u03B1, \u03B4, \u03B10, \u03B40) {\n const [s\u03B4, c\u03B4] = base[\"default\"].sincos(\u03B4);\n const [s\u03B40, c\u03B40] = base[\"default\"].sincos(\u03B40);\n return s\u03B40 * s\u03B4 + c\u03B40 * c\u03B4 * Math.cos(\u03B10 - \u03B1)\n}\n\n/**\n * phase angle from cos elongation and distances\n * @private\n * @param {number} \u0394\n * @param {number} R\n * @param {number} c\u03C8\n * @returns {number}\n */\nfunction pa (\u0394, R, c\u03C8) {\n const s\u03C8 = Math.sin(Math.acos(c\u03C8));\n let i = Math.atan(R * s\u03C8 / (\u0394 - R * c\u03C8));\n if (i < 0) {\n i += Math.PI;\n }\n return i\n}\n\n/**\n * phaseAngleEquatorial2 computes the phase angle of the Moon given equatorial coordinates.\n *\n * Less accurate than phaseAngleEquatorial.\n *\n * Arguments \u03B1, \u03B4 are geocentric right ascension and declination of the Moon;\n * \u03B10, \u03B40 are coordinates of the Sun. Angles must be in radians.\n *\n * @param {Coord} cMoon - eocentric right ascension and declination of the Moon\n * @param {Coord} cSun - coordinates of the Sun\n * @returns {number} phase angle of the Moon in radians\n */\nfunction phaseAngleEquatorial2 (cMoon, cSun) {\n return Math.acos(-cosEq(cMoon.ra, cMoon.dec, cSun.ra, cSun.dec))\n}\n\n/**\n * phaseAngleEcliptic computes the phase angle of the Moon given ecliptic coordinates.\n *\n * Distances must be in the same units as each other.\n *\n * @param {Coord} cMoon - geocentric longitude, latitude and distance to the Moon\n * @param {Coord} cSun - longitude and distance to the Sun\n * @returns {number} phase angle of the Moon in radians\n */\nfunction phaseAngleEcliptic (cMoon, cSun) {\n return pa(cMoon.range, cSun.range, cosEcl(cMoon.lon, cMoon.lat, cSun.lon))\n}\n\n/**\n * cos elongation from ecliptic coordinates\n * @private\n */\nfunction cosEcl (\u03BB, \u03B2, \u03BB0) { // (\u03BB, \u03B2, \u03BB0 float64) float64\n return Math.cos(\u03B2) * Math.cos(\u03BB - \u03BB0)\n}\n\n/**\n * phaseAngleEcliptic2 computes the phase angle of the Moon given ecliptic coordinates.\n *\n * Less accurate than phaseAngleEcliptic.\n *\n * Angles must be in radians.\n *\n * @param {Coord} cMoon - geocentric longitude, latitude of the Moon\n * @param {Coord} cSun - longitude of the Sun\n * @returns {number} phase angle of the Moon in radians\n */\nfunction phaseAngleEcliptic2 (cMoon, cSun) {\n return Math.acos(-cosEcl(cMoon.lon, cMoon.lat, cSun.lon))\n}\n\n/**\n * phaseAngle3 computes the phase angle of the Moon given a julian day.\n *\n * Less accurate than phaseAngle functions taking coordinates.\n *\n * Result in radians.\n */\nfunction phaseAngle3 (jde) { // (jde float64) float64\n const T = base[\"default\"].J2000Century(jde);\n const D = base[\"default\"].horner(T, 297.8501921 * D2R, 445267.1114034 * D2R,\n -0.0018819 * D2R, D2R / 545868, -D2R / 113065000);\n const m = base[\"default\"].horner(T, 357.5291092 * D2R, 35999.0502909 * D2R,\n -0.0001536 * D2R, D2R / 24490000);\n const m_ = base[\"default\"].horner(T, 134.9633964 * D2R, 477198.8675055 * D2R,\n 0.0087414 * D2R, D2R / 69699, -D2R / 14712000);\n return Math.PI - base[\"default\"].pmod(D, 2 * Math.PI) +\n -6.289 * D2R * Math.sin(m_) +\n 2.1 * D2R * Math.sin(m) +\n -1.274 * D2R * Math.sin(2 * D - m_) +\n -0.658 * D2R * Math.sin(2 * D) +\n -0.214 * D2R * Math.sin(2 * m_) +\n -0.11 * D2R * Math.sin(D)\n}\n\nvar moonillum = {\n phaseAngleEquatorial,\n phaseAngleEquatorial2,\n phaseAngleEcliptic,\n phaseAngleEcliptic2,\n phaseAngle3\n};\n\nexports[\"default\"] = moonillum;\nexports.phaseAngle3 = phaseAngle3;\nexports.phaseAngleEcliptic = phaseAngleEcliptic;\nexports.phaseAngleEcliptic2 = phaseAngleEcliptic2;\nexports.phaseAngleEquatorial = phaseAngleEquatorial;\nexports.phaseAngleEquatorial2 = phaseAngleEquatorial2;\n", "'use strict';\n\nObject.defineProperty(exports, '__esModule', { value: true });\n\nvar base = require('./base.cjs');\n\n/**\n * @copyright 2013 Sonia Keys\n * @copyright 2016 commenthol\n * @license MIT\n * @module moonmaxdec\n */\n\n/**\n * North computes the maximum northern declination of the Moon near a given date.\n *\n * Argument year is a decimal year specifying a date near the event.\n *\n * Returned is the jde of the event nearest the given date and the declination\n * of the Moon at that time.\n */\nfunction north (y) { // (y float64) (jde, \u03B4 float64)\n return max(y, nc)\n}\n\n/**\n * South computes the maximum southern declination of the Moon near a given date.\n *\n * Argument year is a decimal year specifying a date near the event.\n *\n * Returned is the jde of the event nearest the given date and the declination\n * of the Moon at that time.\n */\nfunction south (y) { // (y float64) (jde, \u03B4 float64)\n return max(y, sc)\n}\n\nconst p = Math.PI / 180;\nconst ck = 1 / 1336.86;\n\n/**\n * @private\n */\nfunction max (y, c) { // (y float64, c *mc) (jde, \u03B4 float64)\n let k = (y - 2000.03) * 13.3686; // (52.1) p. 367\n k = Math.floor(k + 0.5);\n const T = k * ck;\n const D = base[\"default\"].horner(T, c.D, 333.0705546 * p / ck, -0.0004214 * p, 0.00000011 * p);\n const m = base[\"default\"].horner(T, c.m, 26.9281592 * p / ck, -0.0000355 * p, -0.0000001 * p);\n const m_ = base[\"default\"].horner(T, c.m_, 356.9562794 * p / ck, 0.0103066 * p, 0.00001251 * p);\n const f = base[\"default\"].horner(T, c.f, 1.4467807 * p / ck, -0.002069 * p, -0.00000215 * p);\n const E = base[\"default\"].horner(T, 1, -0.002516, -0.0000074);\n const jde = base[\"default\"].horner(T, c.JDE, 27.321582247 / ck, 0.000119804, -0.000000141) +\n c.tc[0] * Math.cos(f) +\n c.tc[1] * Math.sin(m_) +\n c.tc[2] * Math.sin(2 * f) +\n c.tc[3] * Math.sin(2 * D - m_) +\n c.tc[4] * Math.cos(m_ - f) +\n c.tc[5] * Math.cos(m_ + f) +\n c.tc[6] * Math.sin(2 * D) +\n c.tc[7] * Math.sin(m) * E +\n c.tc[8] * Math.cos(3 * f) +\n c.tc[9] * Math.sin(m_ + 2 * f) +\n c.tc[10] * Math.cos(2 * D - f) +\n c.tc[11] * Math.cos(2 * D - m_ - f) +\n c.tc[12] * Math.cos(2 * D - m_ + f) +\n c.tc[13] * Math.cos(2 * D + f) +\n c.tc[14] * Math.sin(2 * m_) +\n c.tc[15] * Math.sin(m_ - 2 * f) +\n c.tc[16] * Math.cos(2 * m_ - f) +\n c.tc[17] * Math.sin(m_ + 3 * f) +\n c.tc[18] * Math.sin(2 * D - m - m_) * E +\n c.tc[19] * Math.cos(m_ - 2 * f) +\n c.tc[20] * Math.sin(2 * (D - m_)) +\n c.tc[21] * Math.sin(f) +\n c.tc[22] * Math.sin(2 * D + m_) +\n c.tc[23] * Math.cos(m_ + 2 * f) +\n c.tc[24] * Math.sin(2 * D - m) * E +\n c.tc[25] * Math.sin(m_ + f) +\n c.tc[26] * Math.sin(m - m_) * E +\n c.tc[27] * Math.sin(m_ - 3 * f) +\n c.tc[28] * Math.sin(2 * m_ + f) +\n c.tc[29] * Math.cos(2 * (D - m_) - f) +\n c.tc[30] * Math.sin(3 * f) +\n c.tc[31] * Math.cos(m_ + 3 * f) +\n c.tc[32] * Math.cos(2 * m_) +\n c.tc[33] * Math.cos(2 * D - m_) +\n c.tc[34] * Math.cos(2 * D + m_ + f) +\n c.tc[35] * Math.cos(m_) +\n c.tc[36] * Math.sin(3 * m_ + f) +\n c.tc[37] * Math.sin(2 * D - m_ + f) +\n c.tc[38] * Math.cos(2 * (D - m_)) +\n c.tc[39] * Math.cos(D + f) +\n c.tc[40] * Math.sin(m + m_) * E +\n c.tc[41] * Math.sin(2 * (D - f)) +\n c.tc[42] * Math.cos(2 * m_ + f) +\n c.tc[43] * Math.cos(3 * m_ + f);\n const \u03B4 = 23.6961 * p - 0.013004 * p * T +\n c.dc[0] * Math.sin(f) +\n c.dc[1] * Math.cos(2 * f) +\n c.dc[2] * Math.sin(2 * D - f) +\n c.dc[3] * Math.sin(3 * f) +\n c.dc[4] * Math.cos(2 * (D - f)) +\n c.dc[5] * Math.cos(2 * D) +\n c.dc[6] * Math.sin(m_ - f) +\n c.dc[7] * Math.sin(m_ + 2 * f) +\n c.dc[8] * Math.cos(f) +\n c.dc[9] * Math.sin(2 * D + m - f) * E +\n c.dc[10] * Math.sin(m_ + 3 * f) +\n c.dc[11] * Math.sin(D + f) +\n c.dc[12] * Math.sin(m_ - 2 * f) +\n c.dc[13] * Math.sin(2 * D - m - f) * E +\n c.dc[14] * Math.sin(2 * D - m_ - f) +\n c.dc[15] * Math.cos(m_ + f) +\n c.dc[16] * Math.cos(m_ + 2 * f) +\n c.dc[17] * Math.cos(2 * m_ + f) +\n c.dc[18] * Math.cos(m_ - 3 * f) +\n c.dc[19] * Math.cos(2 * m_ - f) +\n c.dc[20] * Math.cos(m_ - 2 * f) +\n c.dc[21] * Math.sin(2 * m_) +\n c.dc[22] * Math.sin(3 * m_ + f) +\n c.dc[23] * Math.cos(2 * D + m - f) * E +\n c.dc[24] * Math.cos(m_ - f) +\n c.dc[25] * Math.cos(3 * f) +\n c.dc[26] * Math.sin(2 * D + f) +\n c.dc[27] * Math.cos(m_ + 3 * f) +\n c.dc[28] * Math.cos(D + f) +\n c.dc[29] * Math.sin(2 * m_ - f) +\n c.dc[30] * Math.cos(3 * m_ + f) +\n c.dc[31] * Math.cos(2 * (D + m_) + f) +\n c.dc[32] * Math.sin(2 * (D - m_) - f) +\n c.dc[33] * Math.cos(2 * m_) +\n c.dc[34] * Math.cos(m_) +\n c.dc[35] * Math.sin(2 * f) +\n c.dc[36] * Math.sin(m_ + f);\n return { jde, dec: c.s * \u03B4 }\n}\n\n/**\n * north coefficients\n */\nconst nc = {\n D: 152.2029 * p,\n m: 14.8591 * p,\n m_: 4.6881 * p,\n f: 325.8867 * p,\n JDE: 2451562.5897,\n s: 1,\n tc: [\n 0.8975,\n -0.4726,\n -0.1030,\n -0.0976,\n -0.0462,\n -0.0461,\n -0.0438,\n 0.0162,\n -0.0157,\n 0.0145,\n 0.0136,\n -0.0095,\n -0.0091,\n -0.0089,\n 0.0075,\n -0.0068,\n 0.0061,\n -0.0047,\n -0.0043,\n -0.004,\n -0.0037,\n 0.0031,\n 0.0030,\n -0.0029,\n -0.0029,\n -0.0027,\n 0.0024,\n -0.0021,\n 0.0019,\n 0.0018,\n 0.0018,\n 0.0017,\n 0.0017,\n -0.0014,\n 0.0013,\n 0.0013,\n 0.0012,\n 0.0011,\n -0.0011,\n 0.001,\n 0.001,\n -0.0009,\n 0.0007,\n -0.0007\n ],\n dc: [\n 5.1093 * p,\n 0.2658 * p,\n 0.1448 * p,\n -0.0322 * p,\n 0.0133 * p,\n 0.0125 * p,\n -0.0124 * p,\n -0.0101 * p,\n 0.0097 * p,\n -0.0087 * p,\n 0.0074 * p,\n 0.0067 * p,\n 0.0063 * p,\n 0.0060 * p,\n -0.0057 * p,\n -0.0056 * p,\n 0.0052 * p,\n 0.0041 * p,\n -0.004 * p,\n 0.0038 * p,\n -0.0034 * p,\n -0.0029 * p,\n 0.0029 * p,\n -0.0028 * p,\n -0.0028 * p,\n -0.0023 * p,\n -0.0021 * p,\n 0.0019 * p,\n 0.0018 * p,\n 0.0017 * p,\n 0.0015 * p,\n 0.0014 * p,\n -0.0012 * p,\n -0.0012 * p,\n -0.001 * p,\n -0.001 * p,\n 0.0006 * p\n ]\n};\n\n/**\n * south coefficients\n */\nconst sc = {\n D: 345.6676 * p,\n m: 1.3951 * p,\n m_: 186.21 * p,\n f: 145.1633 * p,\n JDE: 2451548.9289,\n s: -1,\n tc: [\n -0.8975,\n -0.4726,\n -0.1030,\n -0.0976,\n 0.0541,\n 0.0516,\n -0.0438,\n 0.0112,\n 0.0157,\n 0.0023,\n -0.0136,\n 0.011,\n 0.0091,\n 0.0089,\n 0.0075,\n -0.003,\n -0.0061,\n -0.0047,\n -0.0043,\n 0.004,\n -0.0037,\n -0.0031,\n 0.0030,\n 0.0029,\n -0.0029,\n -0.0027,\n 0.0024,\n -0.0021,\n -0.0019,\n -0.0006,\n -0.0018,\n -0.0017,\n 0.0017,\n 0.0014,\n -0.0013,\n -0.0013,\n 0.0012,\n 0.0011,\n 0.0011,\n 0.001,\n 0.001,\n -0.0009,\n -0.0007,\n -0.0007\n ],\n dc: [\n -5.1093 * p,\n 0.2658 * p,\n -0.1448 * p,\n 0.0322 * p,\n 0.0133 * p,\n 0.0125 * p,\n -0.0015 * p,\n 0.0101 * p,\n -0.0097 * p,\n 0.0087 * p,\n 0.0074 * p,\n 0.0067 * p,\n -0.0063 * p,\n -0.0060 * p,\n 0.0057 * p,\n -0.0056 * p,\n -0.0052 * p,\n -0.0041 * p,\n -0.004 * p,\n -0.0038 * p,\n 0.0034 * p,\n -0.0029 * p,\n 0.0029 * p,\n 0.0028 * p,\n -0.0028 * p,\n 0.0023 * p,\n 0.0021 * p,\n 0.0019 * p,\n 0.0018 * p,\n -0.0017 * p,\n 0.0015 * p,\n 0.0014 * p,\n 0.0012 * p,\n -0.0012 * p,\n 0.001 * p,\n -0.001 * p,\n 0.0037 * p\n ]\n};\n\nvar moonmaxdec = {\n north,\n south\n};\n\nexports[\"default\"] = moonmaxdec;\nexports.north = north;\nexports.south = south;\n", "'use strict';\n\nObject.defineProperty(exports, '__esModule', { value: true });\n\nvar base = require('./base.cjs');\n\n/**\n * @copyright 2013 Sonia Keys\n * @copyright 2016 commenthol\n * @license MIT\n * @module moonnode\n */\n\n/**\n * Ascending returns the date of passage of the Moon through an ascending node.\n *\n * @param {Number} year - decimal year specifying a date near the event.\n * @returns {Number} jde of the event nearest the given date.\n */\nfunction ascending (year) { // (year float64) float64\n return node(year, 0)\n}\n\n/**\n * Descending returns the date of passage of the Moon through a descending node.\n *\n * @param {Number} year - decimal year specifying a date near the event.\n * @returns {Number} jde of the event nearest the given date.\n */\nfunction descending (year) { // (year float64) float64\n return node(year, 0.5)\n}\n\n/**\n * @private\n */\nfunction node (y, h) { // (y, h float64) float64\n let k = (y - 2000.05) * 13.4223; // (50.1) p. 355\n k = Math.floor(k - h + 0.5) + h; // snap to half orbit\n const p = Math.PI / 180;\n const ck = 1 / 1342.23;\n const T = k * ck;\n const D = base[\"default\"].horner(T, 183.638 * p, 331.73735682 * p / ck,\n 0.0014852 * p, 0.00000209 * p, -0.00000001 * p);\n const M = base[\"default\"].horner(T, 17.4006 * p, 26.8203725 * p / ck,\n 0.0001186 * p, 0.00000006 * p);\n const m_ = base[\"default\"].horner(T, 38.3776 * p, 355.52747313 * p / ck,\n 0.0123499 * p, 0.000014627 * p, -0.000000069 * p);\n const \u03A9 = base[\"default\"].horner(T, 123.9767 * p, -1.44098956 * p / ck,\n 0.0020608 * p, 0.00000214 * p, -0.000000016 * p);\n const V = base[\"default\"].horner(T, 299.75 * p, 132.85 * p, -0.009173 * p);\n const P = \u03A9 + 272.75 * p - 2.3 * p * T;\n const E = base[\"default\"].horner(T, 1, -0.002516, -0.0000074);\n return base[\"default\"].horner(T, 2451565.1619, 27.212220817 / ck,\n 0.0002762, 0.000000021, -0.000000000088) +\n -0.4721 * Math.sin(m_) +\n -0.1649 * Math.sin(2 * D) +\n -0.0868 * Math.sin(2 * D - m_) +\n 0.0084 * Math.sin(2 * D + m_) +\n -0.0083 * Math.sin(2 * D - M) * E +\n -0.0039 * Math.sin(2 * D - M - m_) * E +\n 0.0034 * Math.sin(2 * m_) +\n -0.0031 * Math.sin(2 * (D - m_)) +\n 0.003 * Math.sin(2 * D + M) * E +\n 0.0028 * Math.sin(M - m_) * E +\n 0.0026 * Math.sin(M) * E +\n 0.0025 * Math.sin(4 * D) +\n 0.0024 * Math.sin(D) +\n 0.0022 * Math.sin(M + m_) * E +\n 0.0017 * Math.sin(\u03A9) +\n 0.0014 * Math.sin(4 * D - m_) +\n 0.0005 * Math.sin(2 * D + M - m_) * E +\n 0.0004 * Math.sin(2 * D - M + m_) * E +\n -0.0003 * Math.sin(2 * (D - M)) * E +\n 0.0003 * Math.sin(4 * D - M) * E +\n 0.0003 * Math.sin(V) +\n 0.0003 * Math.sin(P)\n}\n\nvar moonnode = {\n ascending,\n descending\n};\n\nexports.ascending = ascending;\nexports[\"default\"] = moonnode;\nexports.descending = descending;\n", "'use strict';\n\nObject.defineProperty(exports, '__esModule', { value: true });\n\nvar base = require('./base.cjs');\n\n/**\n * @copyright 2013 Sonia Keys\n * @copyright 2016 commenthol\n * @license MIT\n * @module parabolic\n */\n\n/**\n * Elements holds parabolic elements needed for computing true anomaly and distance.\n */\nclass Elements {\n /**\n * @param {Number} timeP - time of perihelion, T\n * @param {Number} pDis - perihelion distance, q\n */\n constructor (timeP, pDis) {\n this.timeP = timeP;\n this.pDis = pDis;\n }\n\n /**\n * AnomalyDistance returns true anomaly and distance of a body in a parabolic orbit of the Sun.\n *\n * @param {Number} jde - Julian ephemeris day\n * @returns {Object} {ano, dist}\n * {Number} ano - True anomaly \u03BD in radians.\n * {Number} dist - Distance r returned in AU.\n */\n anomalyDistance (jde) {\n const W = 3 * base[\"default\"].K / Math.SQRT2 * (jde - this.timeP) / this.pDis / Math.sqrt(this.pDis);\n const G = W * 0.5;\n const Y = Math.cbrt(G + Math.sqrt(G * G + 1));\n const s = Y - 1 / Y;\n const \u03BD = 2 * Math.atan(s);\n const r = this.pDis * (1 + s * s);\n return {\n ano: \u03BD,\n dist: r\n }\n }\n}\n\nvar parabolic = {\n Elements\n};\n\nexports.Elements = Elements;\nexports[\"default\"] = parabolic;\n", "'use strict';\n\nObject.defineProperty(exports, '__esModule', { value: true });\n\nvar base = require('./base.cjs');\nvar nutation = require('./nutation.cjs');\n\n/**\n * @copyright 2013 Sonia Keys\n * @copyright 2016 commenthol\n * @license MIT\n * @module sidereal\n */\n\n/**\n * JDToCFrac returns values for use in computing sidereal time at Greenwich.\n *\n * Cen is centuries from J2000 of the JD at 0h UT of argument jd. This is\n * the value to use for evaluating the IAU sidereal time polynomial.\n * DayFrac is the fraction of jd after 0h UT. It is used to compute the\n * final value of sidereal time.\n *\n * @param {number} jd - Julian Days\n * @return {number[]} [century, fraction] century and fraction of jd after 0h UT\n */\nfunction JDToCFrac (jd) {\n const [j0, f] = base[\"default\"].modf(jd + 0.5);\n return [base[\"default\"].J2000Century(j0 - 0.5), f] // (cen, dayFrac /* float */)\n}\n\n/**\n * iau82 is a polynomial giving mean sidereal time at Greenwich at 0h UT.\n *\n * The polynomial is in centuries from J2000.0, as given by JDToCFrac.\n * Coefficients are those adopted in 1982 by the International Astronomical\n * Union and are given in (12.2) p. 87.\n */\nconst iau82 = [24110.54841, 8640184.812866, 0.093104, -0.0000062];\n\n/**\n * Mean returns mean sidereal time at Greenwich for a given JD.\n *\n * Computation is by IAU 1982 coefficients. The result is in seconds of\n * time and is in the range [0,86400).\n *\n * @param {number} jd - Julian Days\n * @return {number}\n */\nfunction mean (jd) {\n return base[\"default\"].pmod(_mean(jd), 86400)\n}\n\n/**\n * @private\n */\nfunction _mean (jd) {\n const [s, f] = _mean0UT(jd);\n return s + f * 1.00273790935 * 86400\n}\n\n/**\n * Mean0UT returns mean sidereal time at Greenwich at 0h UT on the given JD.\n *\n * The result is in seconds of time and is in the range [0,86400).\n *\n * @param {number} jd - Julian Days\n * @return {number}\n */\nfunction mean0UT (jd /* float */) {\n const [s, _] = _mean0UT(jd); // eslint-disable-line\n return base[\"default\"].pmod(s, 86400)\n}\n\n/**\n * @private\n */\nfunction _mean0UT (jd /* float */) {\n const [cen, f] = JDToCFrac(jd);\n // (12.2) p. 87\n return [base[\"default\"].horner(cen, ...iau82), f] // (sidereal, dayFrac /* float */)\n}\n\n/**\n * Apparent returns apparent sidereal time at Greenwich for the given JD.\n *\n * Apparent is mean plus the nutation in right ascension.\n *\n * The result is in seconds of time and is in the range [0,86400).\n *\n * @param {number} jd - Julian Days\n * @return {number}\n */\nfunction apparent (jd) {\n const s = _mean(jd); // seconds of time\n const n = nutation[\"default\"].nutationInRA(jd); // angle (radians) of RA\n const ns = n * 3600 * 180 / Math.PI / 15; // convert RA to time in seconds\n return base[\"default\"].pmod(s + ns, 86400)\n}\n\n/**\n * Apparent0UT returns apparent sidereal time at Greenwich at 0h UT\n * on the given JD.\n *\n * The result is in seconds of time and is in the range [0,86400).\n *\n * @param {number} jd - Julian Days\n * @return {number}\n */\nfunction apparent0UT (jd) {\n const [j0, f] = base[\"default\"].modf(jd + 0.5);\n const cen = (j0 - 0.5 - base[\"default\"].J2000) / 36525;\n const s = base[\"default\"].horner(cen, ...iau82) + f * 1.00273790935 * 86400;\n const n = nutation[\"default\"].nutationInRA(j0); // angle (radians) of RA\n const ns = n * 3600 * 180 / Math.PI / 15; // convert RA to time in seconds\n return base[\"default\"].pmod(s + ns, 86400)\n}\n\nvar sidereal = {\n JDToCFrac,\n iau82,\n mean,\n mean0UT,\n apparent,\n apparent0UT\n};\n\nexports.JDToCFrac = JDToCFrac;\nexports.apparent = apparent;\nexports.apparent0UT = apparent0UT;\nexports[\"default\"] = sidereal;\nexports.iau82 = iau82;\nexports.mean = mean;\nexports.mean0UT = mean0UT;\n", "'use strict';\n\nObject.defineProperty(exports, '__esModule', { value: true });\n\nvar base = require('./base.cjs');\nvar globe = require('./globe.cjs');\nvar sidereal = require('./sidereal.cjs');\nvar sexagesimal = require('./sexagesimal.cjs');\n\n/**\n * @copyright 2013 Sonia Keys\n * @copyright 2016 commenthol\n * @license MIT\n * @module parallax\n */\n\nconst horPar = (8.794 / 3600) * Math.PI / 180; // 8\".794 arcseconds in radians\n\n/**\n * Horizontal returns equatorial horizontal parallax of a body.\n *\n * @param {number} \u0394 - distance in AU.\n * @return {number} parallax in radians.\n */\nfunction horizontal (\u0394) {\n // (40.1) p. 279\n return Math.asin(Math.sin(horPar) / \u0394)\n // return horPar / \u0394 // with sufficient accuracy\n}\n\n/**\n * Topocentric returns topocentric positions including parallax.\n *\n * Arguments \u03B1, \u03B4 are geocentric right ascension and declination in radians.\n * \u0394 is distance to the observed object in AU. \u03C1s\u03C6, \u03C1c\u03C6 are parallax\n * constants (see package globe.) lon is geographic longitude of the observer,\n * jde is time of observation.\n *\n * @param {Coord} c - geocentric right ascension and declination in radians\n * @param {number} \u03C1s\u03C6 - parallax constants (see package globe.)\n * @param {number} \u03C1c\u03C6 - parallax constants (see package globe.)\n * @param {number} lon - geographic longitude of the observer (measured positively westwards!)\n * @param {number} jde - time of observation\n * @return {Coord} observed topocentric ra and dec in radians.\n */\nfunction topocentric (c, \u03C1s\u03C6, \u03C1c\u03C6, lon, jde) {\n const [\u03B1, \u03B4, \u0394] = [c.ra, c.dec, c.range];\n const \u03C0 = horizontal(\u0394);\n const \u03B80 = new sexagesimal[\"default\"].Time(sidereal[\"default\"].apparent(jde)).rad();\n const H = base[\"default\"].pmod(\u03B80 - lon - \u03B1, 2 * Math.PI);\n const s\u03C0 = Math.sin(\u03C0);\n const [sH, cH] = base[\"default\"].sincos(H);\n const [s\u03B4, c\u03B4] = base[\"default\"].sincos(\u03B4);\n const \u0394\u03B1 = Math.atan2(-\u03C1c\u03C6 * s\u03C0 * sH, c\u03B4 - \u03C1c\u03C6 * s\u03C0 * cH); // (40.2) p. 279\n const \u03B1_ = \u03B1 + \u0394\u03B1;\n const \u03B4_ = Math.atan2((s\u03B4 - \u03C1s\u03C6 * s\u03C0) * Math.cos(\u0394\u03B1), c\u03B4 - \u03C1c\u03C6 * s\u03C0 * cH); // (40.3) p. 279\n return new base.Coord(\u03B1_, \u03B4_)\n}\n\n/**\n * Topocentric2 returns topocentric corrections including parallax.\n *\n * This function implements the \"non-rigorous\" method descripted in the text.\n *\n * Note that results are corrections, not corrected coordinates.\n *\n * @param {Coord} c - geocentric right ascension and declination in radians\n * @param {number} \u03C1s\u03C6 - parallax constants (see package globe.)\n * @param {number} \u03C1c\u03C6 - parallax constants (see package globe.)\n * @param {number} lon - geographic longitude of the observer (measured positively westwards!)\n * @param {number} jde - time of observation\n * @return {Coord} observed topocentric ra and dec in radians.\n */\nfunction topocentric2 (c, \u03C1s\u03C6, \u03C1c\u03C6, lon, jde) {\n const [\u03B1, \u03B4, \u0394] = [c.ra, c.dec, c.range];\n const \u03C0 = horizontal(\u0394);\n const \u03B80 = new sexagesimal[\"default\"].Time(sidereal[\"default\"].apparent(jde)).rad();\n const H = base[\"default\"].pmod(\u03B80 - lon - \u03B1, 2 * Math.PI);\n const [sH, cH] = base[\"default\"].sincos(H);\n const [s\u03B4, c\u03B4] = base[\"default\"].sincos(\u03B4);\n const \u0394\u03B1 = -\u03C0 * \u03C1c\u03C6 * sH / c\u03B4; // (40.4) p. 280\n const \u0394\u03B4 = -\u03C0 * (\u03C1s\u03C6 * c\u03B4 - \u03C1c\u03C6 * cH * s\u03B4); // (40.5) p. 280\n return new base[\"default\"].Coord(\u0394\u03B1, \u0394\u03B4)\n}\n\n/**\n * Topocentric3 returns topocentric hour angle and declination including parallax.\n *\n * This function implements the \"alternative\" method described in the text.\n * The method should be similarly rigorous to that of Topocentric() and results\n * should be virtually consistent.\n *\n * @param {Coord} c - geocentric right ascension and declination in radians\n * @param {number} \u03C1s\u03C6 - parallax constants (see package globe.)\n * @param {number} \u03C1c\u03C6 - parallax constants (see package globe.)\n * @param {number} lon - geographic longitude of the observer (measured positively westwards!)\n * @param {number} jde - time of observation\n * @return {Array}\n * {number} H_ - topocentric hour angle\n * {number} \u03B4_ - topocentric declination\n */\nfunction topocentric3 (c, \u03C1s\u03C6, \u03C1c\u03C6, lon, jde) {\n const [\u03B1, \u03B4, \u0394] = [c.ra, c.dec, c.range];\n const \u03C0 = horizontal(\u0394);\n const \u03B80 = new sexagesimal[\"default\"].Time(sidereal[\"default\"].apparent(jde)).rad();\n const H = base[\"default\"].pmod(\u03B80 - lon - \u03B1, 2 * Math.PI);\n const s\u03C0 = Math.sin(\u03C0);\n const [sH, cH] = base[\"default\"].sincos(H);\n const [s\u03B4, c\u03B4] = base[\"default\"].sincos(\u03B4);\n const A = c\u03B4 * sH;\n const B = c\u03B4 * cH - \u03C1c\u03C6 * s\u03C0;\n const C = s\u03B4 - \u03C1s\u03C6 * s\u03C0;\n const q = Math.sqrt(A * A + B * B + C * C);\n const H_ = Math.atan2(A, B);\n const \u03B4_ = Math.asin(C / q);\n return [H_, \u03B4_]\n}\n\n/**\n * TopocentricEcliptical returns topocentric ecliptical coordinates including parallax.\n *\n * Arguments `c` are geocentric ecliptical longitude and latitude of a body,\n * s is its geocentric semidiameter. \u03C6, h are the observer's latitude and\n * and height above the ellipsoid in meters. \u03B5 is the obliquity of the\n * ecliptic, \u03B8 is local sidereal time, \u03C0 is equatorial horizontal parallax\n * of the body (see Horizonal()).\n *\n * All angular parameters and results are in radians.\n *\n * @param {Coord} c - geocentric right ascension and declination in radians\n * @param {number} s - geocentric semidiameter of `c`\n * @param {number} \u03C6 - observer's latitude\n * @param {number} h - observer's height above the ellipsoid in meters\n * @param {number} \u03B5 - is the obliquity of the ecliptic\n * @param {number} \u03B8 - local sidereal time\n * @param {number} \u03C0 - equatorial horizontal parallax of the body\n * @return {Array}\n * {number} \u03BB_ - observed topocentric longitude\n * {number} \u03B2_ - observed topocentric latitude\n * {number} s_ - observed topocentric semidiameter\n */\nfunction topocentricEcliptical (c, s, \u03C6, h, \u03B5, \u03B8, \u03C0) {\n const [\u03BB, \u03B2] = [c.lon, c.lat];\n const [S, C] = globe[\"default\"].Earth76.parallaxConstants(\u03C6, h);\n const [s\u03BB, c\u03BB] = base[\"default\"].sincos(\u03BB);\n const [s\u03B2, c\u03B2] = base[\"default\"].sincos(\u03B2);\n const [s\u03B5, c\u03B5] = base[\"default\"].sincos(\u03B5);\n const [s\u03B8, c\u03B8] = base[\"default\"].sincos(\u03B8);\n const s\u03C0 = Math.sin(\u03C0);\n const N = c\u03BB * c\u03B2 - C * s\u03C0 * c\u03B8;\n let \u03BB_ = Math.atan2(s\u03BB * c\u03B2 - s\u03C0 * (S * s\u03B5 + C * c\u03B5 * s\u03B8), N);\n if (\u03BB_ < 0) {\n \u03BB_ += 2 * Math.PI;\n }\n const c\u03BB_ = Math.cos(\u03BB_);\n const \u03B2_ = Math.atan(c\u03BB_ * (s\u03B2 - s\u03C0 * (S * c\u03B5 - C * s\u03B5 * s\u03B8)) / N);\n const s_ = Math.asin(c\u03BB_ * Math.cos(\u03B2_) * Math.sin(s) / N);\n return [\u03BB_, \u03B2_, s_]\n}\n\nvar parallax = {\n horizontal,\n topocentric,\n topocentric2,\n topocentric3,\n topocentricEcliptical\n};\n\nexports[\"default\"] = parallax;\nexports.horizontal = horizontal;\nexports.topocentric = topocentric;\nexports.topocentric2 = topocentric2;\nexports.topocentric3 = topocentric3;\nexports.topocentricEcliptical = topocentricEcliptical;\n", "'use strict';\n\nObject.defineProperty(exports, '__esModule', { value: true });\n\nvar base = require('./base.cjs');\n\n/**\n * @copyright 2013 Sonia Keys\n * @copyright 2016 commenthol\n * @license MIT\n * @module parallactic\n */\n\n/**\n * ParallacticAngle returns parallactic angle of a celestial object.\n *\n * \u03C6 is geographic latitude of observer.\n * \u03B4 is declination of observed object.\n * H is hour angle of observed object.\n *\n * All angles including result are in radians.\n */\nfunction parallacticAngle (\u03C6, \u03B4, H) { // (\u03C6, \u03B4, H float64) float64\n const [s\u03B4, c\u03B4] = base[\"default\"].sincos(\u03B4);\n const [sH, cH] = base[\"default\"].sincos(H);\n return Math.atan2(sH, Math.tan(\u03C6) * c\u03B4 - s\u03B4 * cH) // (14.1) p. 98\n}\n\n/**\n * ParallacticAngleOnHorizon is a special case of ParallacticAngle.\n *\n * The hour angle is not needed as an input and the math inside simplifies.\n */\nfunction parallacticAngleOnHorizon (\u03C6, \u03B4) { // (\u03C6, \u03B4 float64) float64\n return Math.acos(Math.sin(\u03C6) / Math.cos(\u03B4))\n}\n\n/**\n * EclipticAtHorizon computes how the plane of the ecliptic intersects\n * the horizon at a given local sidereal time as observed from a given\n * geographic latitude.\n *\n * \u03B5 is obliquity of the ecliptic.\n * \u03C6 is geographic latitude of observer.\n * \u03B8 is local sidereal time expressed as an hour angle.\n *\n * \u03BB1 and \u03BB2 are ecliptic longitudes where the ecliptic intersects the horizon.\n * I is the angle at which the ecliptic intersects the horizon.\n *\n * All angles, arguments and results, are in radians.\n */\nfunction eclipticAtHorizon (\u03B5, \u03C6, \u03B8) { // (\u03B5, \u03C6, \u03B8 float64) (\u03BB1, \u03BB2, I float64)\n const [s\u03B5, c\u03B5] = base[\"default\"].sincos(\u03B5);\n const [s\u03C6, c\u03C6] = base[\"default\"].sincos(\u03C6);\n const [s\u03B8, c\u03B8] = base[\"default\"].sincos(\u03B8);\n let \u03BB = Math.atan2(-c\u03B8, s\u03B5 * (s\u03C6 / c\u03C6) + c\u03B5 * s\u03B8); // (14.2) p. 99\n if (\u03BB < 0) {\n \u03BB += Math.PI;\n }\n return [\u03BB, \u03BB + Math.PI, Math.acos(c\u03B5 * s\u03C6 - s\u03B5 * c\u03C6 * s\u03B8)] // (14.3) p. 99\n}\n\n/**\n * EclipticAtEquator computes the angle between the ecliptic and the parallels\n * of ecliptic latitude at a given ecliptic longitude.\n *\n * (The function name EclipticAtEquator is for consistency with the Meeus text,\n * and works if you consider the equator a nominal parallel of latitude.)\n *\n * \u03BB is ecliptic longitude.\n * \u03B5 is obliquity of the ecliptic.\n *\n * All angles in radians.\n */\nfunction eclipticAtEquator (\u03BB, \u03B5) { // (\u03BB, \u03B5 float64) float64\n return Math.atan(-Math.cos(\u03BB) * Math.tan(\u03B5))\n}\n\n/**\n * DiurnalPathAtHorizon computes the angle of the path a celestial object\n * relative to the horizon at the time of its rising or setting.\n *\n * \u03B4 is declination of the object.\n * \u03C6 is geographic latitude of observer.\n *\n * All angles in radians.\n */\nfunction diurnalPathAtHorizon (\u03B4, \u03C6) { // (\u03B4, \u03C6 float64) (J float64)\n const t\u03C6 = Math.tan(\u03C6);\n const b = Math.tan(\u03B4) * t\u03C6;\n const c = Math.sqrt(1 - b * b);\n return Math.atan(c * Math.cos(\u03B4) / t\u03C6)\n}\n\nvar parallactic = {\n parallacticAngle,\n parallacticAngleOnHorizon,\n eclipticAtHorizon,\n eclipticAtEquator,\n diurnalPathAtHorizon\n};\n\nexports[\"default\"] = parallactic;\nexports.diurnalPathAtHorizon = diurnalPathAtHorizon;\nexports.eclipticAtEquator = eclipticAtEquator;\nexports.eclipticAtHorizon = eclipticAtHorizon;\nexports.parallacticAngle = parallacticAngle;\nexports.parallacticAngleOnHorizon = parallacticAngleOnHorizon;\n", "'use strict';\n\nObject.defineProperty(exports, '__esModule', { value: true });\n\nvar base = require('./base.cjs');\nvar interpolation = require('./interpolation.cjs');\nrequire('./coord.cjs');\nrequire('./nutation.cjs');\n\n/* eslint-disable n/no-callback-literal */\n\n/**\n * Planet constants for first argument of Perihelion and Aphelion functions.\n * @enum {number}\n */\nconst planetsEnum = {\n mercury: 0,\n venus: 1,\n earth: 2,\n mars: 3,\n jupiter: 4,\n saturn: 5,\n uranus: 6,\n neptune: 7,\n embary: 8\n};\nconst mercury = planetsEnum.mercury;\nconst venus = planetsEnum.venus;\nconst earth = planetsEnum.earth;\nconst mars = planetsEnum.mars;\nconst jupiter = planetsEnum.jupiter;\nconst saturn = planetsEnum.saturn;\nconst uranus = planetsEnum.uranus;\nconst neptune = planetsEnum.neptune;\nconst embary = planetsEnum.embary;\n\n/**\n * Perihelion returns an approximate jde of the perihelion event nearest the given time.\n *\n * @param {planetsEnum} p - planet constant from above\n * @param {Number} year - year number indicating a time near the perihelion event.\n * @returns {Number} jde - time of the event\n */\nfunction perihelion (p, year) {\n return ap(p, year, false, pf)\n}\n\n/**\n * Aphelion returns an approximate jde of the aphelion event nearest the given time.\n *\n * @param {planetsEnum} p - planet constant from above\n * @param {Number} year - year number indicating a time near the aphelion event.\n * @returns {Number} jde - time of the event\n */\nfunction aphelion (p, year) {\n return ap(p, year, true, af)\n}\n\nconst pf = function (x) { // (x float64) float64\n return Math.floor(x + 0.5)\n};\n\nconst af = function (x) { // (x float64) float64\n return Math.floor(x) + 0.5\n};\n\nconst ap = function (p, y, a, f) { // (p int, y float64, a bool, f func(float64) float64) float64\n let i = p;\n if (i === embary) {\n i = earth;\n }\n const k = f(ka[i].a * (y - ka[i].b));\n let j = base[\"default\"].horner(k, ...c[i]);\n if (p === earth) {\n let c = ep;\n if (a) {\n c = ea;\n }\n for (let i = 0; i < 5; i++) {\n j += c[i] * Math.sin((ec[i].a + ec[i].b * k) * Math.PI / 180);\n }\n }\n return j\n};\n\nconst ka = [\n { a: 4.15201, b: 2000.12 }, // mercury\n { a: 1.62549, b: 2000.53 }, // ...\n { a: 0.99997, b: 2000.01 },\n { a: 0.53166, b: 2001.78 },\n { a: 0.0843, b: 2011.2 },\n { a: 0.03393, b: 2003.52 },\n { a: 0.0119, b: 2051.1 },\n { a: 0.00607, b: 2047.5 } // neptune\n];\n\nconst c = [\n [2451590.257, 87.96934963], // mercury\n [2451738.233, 224.7008188, -0.0000000327], // ...\n [2451547.507, 365.2596358, 0.0000000156],\n [2452195.026, 686.9957857, -0.0000001187],\n [2455636.936, 4332.897065, 0.0001367],\n [2452830.12, 10764.21676, 0.000827],\n [2470213.5, 30694.8767, -0.00541],\n [2468895.1, 60190.33, 0.03429] // neptune\n];\n\nconst ec = [\n { a: 328.41, b: 132.788585 },\n { a: 316.13, b: 584.903153 },\n { a: 346.2, b: 450.380738 },\n { a: 136.95, b: 659.306737 },\n { a: 249.52, b: 329.653368 }\n];\n\nconst ep = [1.278, -0.055, -0.091, -0.056, -0.045];\nconst ea = [-1.352, 0.061, 0.062, 0.029, 0.031];\n\n/**\n * Perihelion2 returns the perihelion event nearest the given time.\n *\n * @param {Planet} planet - VSOP87 planet (EMBary is not allowed)\n * @param {Number} year - (float) decimal year number near the perihelion event\n * @param {Number} precision - desired precision of the time result, in days\n * @param {Function} [cb] - callback function for asynchronous processing `cb([jde, r])`\n * @returns {Array} [jde, r]\n * {Number} jde - time of the event\n * {Number} r - the distance of the planet from the Sun in AU.\n */\nfunction perihelion2 (planet, year, precision, cb) {\n return ap2(planetsEnum[planet.name], year, precision, planet, false, pf, cb)\n}\n\n/**\n * Aphelion2 returns the aphelion event nearest the given time.\n *\n * @param {Planet} planet - VSOP87 planet (EMBary is not allowed)\n * @param {Number} year - (float) decimal year number near the perihelion event\n * @param {Number} precision - desired precision of the time result, in days\n * @param {Function} [cb] - callback function for asynchronous processing `cb([jde, r])`\n * @returns {Array} [jde, r]\n * {Number} jde - time of the event\n * {Number} r - the distance of the planet from the Sun in AU.\n */\nfunction aphelion2 (planet, year, precision, cb) {\n return ap2(planetsEnum[planet.name], year, precision, planet, true, af, cb)\n}\n\nconst ap2 = function (p, y, d, v, a, f, cb) {\n const j1 = ap(p, y, a, f);\n if (p !== neptune) {\n return ap2a(j1, d, a, v, cb)\n }\n // handle the double extrema of Neptune\n if (cb) {\n ap2a(j1 - 5000, d, a, v, ([j0, r0]) => {\n ap2a(j1 + 5000, d, a, v, ([j2, r2]) => {\n if ((r0 > r2) === a) {\n cb([j0, r0]);\n return\n }\n cb([j2, r2]);\n });\n });\n } else {\n const [j0, r0] = ap2a(j1 - 5000, d, a, v);\n const [j2, r2] = ap2a(j1 + 5000, d, a, v);\n if ((r0 > r2) === a) {\n return [j0, r0]\n }\n return [j2, r2]\n }\n};\n\nconst ap2a = function (j1, d, a, v, cb) {\n let j0 = j1 - d;\n let j2 = j1 + d;\n const rr = new Array(3);\n rr[1] = v.position2000(j1).range;\n rr[0] = v.position2000(j0).range;\n rr[2] = v.position2000(j2).range;\n\n function end () {\n const l = new interpolation[\"default\"].Len3(j0, j2, rr);\n const [jde, r] = l.extremum();\n return [jde, r]\n }\n\n function run () {\n if (a) {\n if (rr[1] > rr[0] && rr[1] > rr[2]) {\n cb && cb(end());\n return true\n }\n } else {\n if (rr[1] < rr[0] && rr[1] < rr[2]) {\n cb && cb(end());\n return true\n }\n }\n if ((rr[0] < rr[2]) === a) {\n j0 = j1;\n j1 = j2;\n j2 += d;\n rr[0] = rr[1];\n rr[1] = rr[2];\n rr[2] = v.position2000(j2).range;\n } else {\n j2 = j1;\n j1 = j0;\n j0 -= d;\n rr[2] = rr[1];\n rr[1] = rr[0];\n rr[0] = v.position2000(j0).range;\n }\n if (cb) {\n setImmediate(run, 0);\n }\n }\n\n if (cb) {\n run();\n } else {\n for (;;) {\n if (run()) {\n return end()\n }\n }\n }\n};\n\nvar perihelion$1 = {\n mercury,\n venus,\n earth,\n mars,\n jupiter,\n saturn,\n uranus,\n neptune,\n embary,\n perihelion,\n aphelion,\n perihelion2,\n aphelion2\n};\n\nexports.aphelion = aphelion;\nexports.aphelion2 = aphelion2;\nexports[\"default\"] = perihelion$1;\nexports.earth = earth;\nexports.embary = embary;\nexports.jupiter = jupiter;\nexports.mars = mars;\nexports.mercury = mercury;\nexports.neptune = neptune;\nexports.perihelion = perihelion;\nexports.perihelion2 = perihelion2;\nexports.saturn = saturn;\nexports.uranus = uranus;\nexports.venus = venus;\n", "'use strict';\n\nObject.defineProperty(exports, '__esModule', { value: true });\n\nvar base = require('./base.cjs');\n\n/**\n * @copyright 2013 Sonia Keys\n * @copyright 2016 commenthol\n * @license MIT\n * @module planetary\n */\n\n/**\n * Mean computes some intermediate values for a mean planetary configuration\n * given a year and a row of coefficients from Table 36.A, p. 250.0\n */\nfunction mean (y, a) { // (y float64, a *ca) (J, M, T float64)\n // (36.1) p. 250\n const k = Math.floor((365.2425 * y + 1721060 - a.A) / a.B + 0.5);\n const J = a.A + k * a.B;\n const M = base[\"default\"].pmod(a.M0 + k * a.M1, 360) * Math.PI / 180;\n const T = base[\"default\"].J2000Century(J);\n return [J, M, T]\n}\n\n/**\n * Sum computes a sum of periodic terms.\n */\nfunction sum (T, M, c) { // (T, M float64, c [][]float64) float64\n let j = base[\"default\"].horner(T, c[0]);\n let mm = 0.0;\n for (let i = 1; i < c.length; i++) {\n mm += M;\n const [smm, cmm] = base[\"default\"].sincos(mm);\n j += smm * base[\"default\"].horner(T, c[i]);\n i++;\n j += cmm * base[\"default\"].horner(T, c[i]);\n }\n return j\n}\n\n/**\n * ms returns a mean time corrected by a sum.\n */\nfunction ms (y, a, c) { // (y float64, a *ca, c [][]float64) float64\n const [J, M, T] = mean(y, a);\n return J + sum(T, M, c)\n}\n\n/**\n * MercuryInfConj returns the time of an inferior conjunction of Mercury.\n *\n * Result is time (as a jde) of the event nearest the given time (as a\n * decimal year.)\n */\nfunction mercuryInfConj (y) { // (y float64) (jde float64)\n return ms(y, micA, micB)\n}\n\n/**\n * MercurySupConj returns the time of a superior conjunction of Mercury.\n *\n * Result is time (as a jde) of the event nearest the given time (as a\n * decimal year.)\n */\nfunction mercurySupConj (y) { // (y float64) (jde float64)\n return ms(y, mscA, mscB)\n}\n\n/**\n * VenusInfConj returns the time of an inferior conjunction of Venus.\n *\n * Result is time (as a jde) of the event nearest the given time (as a\n * decimal year.)\n */\nfunction venusInfConj (y) { // (y float64) (jde float64)\n return ms(y, vicA, vicB)\n}\n\n/**\n * MarsOpp returns the time of an opposition of Mars.\n *\n * Result is time (as a jde) of the event nearest the given time (as a\n * decimal year.)\n */\nfunction marsOpp (y) { // (y float64) (jde float64)\n return ms(y, moA, moB)\n}\n\n/**\n * SumA computes the sum of periodic terms with \"additional angles\"\n */\nfunction sumA (T, M, c, aa) { // (T, M float64, c [][]float64, aa []caa) float64\n let i = c.length - 2 * aa.length;\n let j = sum(T, M, c.slice(0, i));\n for (let k = 0; k < aa.length; k++) {\n const [saa, caa] = base[\"default\"].sincos((aa[k].c + aa[k].f * T) * Math.PI / 180);\n j += saa * base[\"default\"].horner(T, c[i]);\n i++;\n j += caa * base[\"default\"].horner(T, c[i]);\n i++;\n }\n return j\n}\n\n/**\n * Msa returns a mean time corrected by a sum.\n */\nfunction msa (y, a, c, aa) { // (y float64, a *ca, c [][]float64, aa []caa) float64\n const [J, M, T] = mean(y, a);\n return J + sumA(T, M, c, aa)\n}\n\n/**\n * JupiterOpp returns the time of an opposition of Jupiter.\n *\n * Result is time (as a jde) of the event nearest the given time (as a\n * decimal year.)\n */\nfunction jupiterOpp (y) { // (y float64) (jde float64)\n return msa(y, joA, joB, jaa)\n}\n\n/**\n * SaturnOpp returns the time of an opposition of Saturn.\n *\n * Result is time (as a jde) of the event nearest the given time (as a\n * decimal year.)\n */\nfunction saturnOpp (y) { // (y float64) (jde float64)\n return msa(y, soA, soB, saa)\n}\n\n/**\n * SaturnConj returns the time of a conjunction of Saturn.\n *\n * Result is time (as a jde) of the event nearest the given time (as a\n * decimal year.)\n */\nfunction saturnConj (y) { // (y float64) (jde float64)\n return msa(y, scA, scB, saa)\n}\n\n/**\n * UranusOpp returns the time of an opposition of Uranus.\n *\n * Result is time (as a jde) of the event nearest the given time (as a\n * decimal year.)\n */\nfunction uranusOpp (y) { // (y float64) (jde float64)\n return msa(y, uoA, uoB, uaa)\n}\n\n/**\n * NeptuneOpp returns the time of an opposition of Neptune.\n *\n * Result is time (as a jde) of the event nearest the given time (as a\n * decimal year.)\n */\nfunction neptuneOpp (y) { // (y float64) (jde float64)\n return msa(y, noA, noB, naa)\n}\n\n/**\n * El computes time and elongation of a greatest elongation event.\n */\nfunction el (y, a, t, e) { // (y float64, a *ca, t, e [][]float64) (jde, elongation float64)\n const [J, M, T] = mean(y, micA);\n return [J + sum(T, M, t), sum(T, M, e) * Math.PI / 180]\n}\n\n/**\n * MercuryEastElongation returns the time and elongation of a greatest eastern elongation of Mercury.\n *\n * Result is time (as a jde) of the event nearest the given time (as a\n * decimal year.)\n */\nfunction mercuryEastElongation (y) { // (y float64) (jde, elongation float64)\n return el(y, micA, met, mee)\n}\n\n/**\n * MercuryWestElongation returns the time and elongation of a greatest western elongation of Mercury.\n *\n * Result is time (as a jde) of the event nearest the given time (as a\n * decimal year.)\n */\nfunction mercuryWestElongation (y) { // (y float64) (jde, elongation float64)\n return el(y, micA, mwt, mwe)\n}\n\nfunction marsStation2 (y) { // (y float64) (jde float64)\n const [J, M, T] = mean(y, moA);\n return J + sum(T, M, ms2)\n}\n\n/**\n * ca holds coefficients from one line of table 36.A, p. 250\n */\nfunction Ca (A, B, M0, M1) {\n this.A = A;\n this.B = B;\n this.M0 = M0;\n this.M1 = M1;\n}\n\n/**\n * Table 36.A, p. 250\n */\nconst micA = new Ca(2451612.023, 115.8774771, 63.5867, 114.2088742);\nconst mscA = new Ca(2451554.084, 115.8774771, 6.4822, 114.2088742);\nconst vicA = new Ca(2451996.706, 583.921361, 82.7311, 215.513058);\nconst moA = new Ca(2452097.382, 779.936104, 181.9573, 48.705244);\nconst joA = new Ca(2451870.628, 398.884046, 318.4681, 33.140229);\nconst soA = new Ca(2451870.17, 378.091904, 318.0172, 12.647487);\nconst scA = new Ca(2451681.124, 378.091904, 131.6934, 12.647487);\nconst uoA = new Ca(2451764.317, 369.656035, 213.6884, 4.333093);\nconst noA = new Ca(2451753.122, 367.486703, 202.6544, 2.194998);\n\n/**\n * caa holds coefficients for \"additional angles\" for outer planets\n * as given on p. 251\n */\nfunction Caa (c, f) {\n this.c = c;\n this.f = f;\n}\n\nconst jaa = [\n new Caa(82.74, 40.76)\n];\n\nconst saa = [\n new Caa(82.74, 40.76),\n new Caa(29.86, 1181.36),\n new Caa(14.13, 590.68),\n new Caa(220.02, 1262.87)\n];\n\nconst uaa = [\n new Caa(207.83, 8.51),\n new Caa(108.84, 419.96)\n];\n\nconst naa = [\n new Caa(207.83, 8.51),\n new Caa(276.74, 209.98)\n];\n\n/**\n * Table 33.B, p. 256\n */\n\n/**\n * Mercury inferior conjunction\n */\nconst micB = [\n [0.0545, 0.0002],\n [-6.2008, 0.0074, 0.00003],\n [-3.275, -0.0197, 0.00001],\n [0.4737, -0.0052, -0.00001],\n [0.8111, 0.0033, -0.00002],\n [0.0037, 0.0018],\n [-0.1768, 0, 0.00001],\n [-0.0211, -0.0004],\n [0.0326, -0.0003],\n [0.0083, 0.0001],\n [-0.004, 0.0001]\n];\n\n/**\n * Mercury superior conjunction\n */\nconst mscB = [\n [-0.0548, -0.0002],\n [7.3894, -0.01, -0.00003],\n [3.22, 0.0197, -0.00001],\n [0.8383, -0.0064, -0.00001],\n [0.9666, 0.0039, -0.00003],\n [0.077, -0.0026],\n [0.2758, 0.0002, -0.00002],\n [-0.0128, -0.0008],\n [0.0734, -0.0004, -0.00001],\n [-0.0122, -0.0002],\n [0.0173, -0.0002]\n];\n\n/**\n * Venus inferior conjunction\n */\nconst vicB = [\n [-0.0096, 0.0002, -0.00001],\n [2.0009, -0.0033, -0.00001],\n [0.598, -0.0104, 0.00001],\n [0.0967, -0.0018, -0.00003],\n [0.0913, 0.0009, -0.00002],\n [0.0046, -0.0002],\n [0.0079, 0.0001]\n];\n\n/**\n * Mars opposition\n */\nconst moB = [\n [-0.3088, 0, 0.00002],\n [-17.6965, 0.0363, 0.00005],\n [18.3131, 0.0467, -0.00006],\n [-0.2162, -0.0198, -0.00001],\n [-4.5028, -0.0019, 0.00007],\n [0.8987, 0.0058, -0.00002],\n [0.7666, -0.005, -0.00003],\n [-0.3636, -0.0001, 0.00002],\n [0.0402, 0.0032],\n [0.0737, -0.0008],\n [-0.098, -0.0011]\n];\n\n/**\n * Jupiter opposition\n */\nconst joB = [\n [-0.1029, 0, -0.00009],\n [-1.9658, -0.0056, 0.00007],\n [6.1537, 0.021, -0.00006],\n [-0.2081, -0.0013],\n [-0.1116, -0.001],\n [0.0074, 0.0001],\n [-0.0097, -0.0001],\n [0, 0.0144, -0.00008],\n [0.3642, -0.0019, -0.00029]\n];\n\n/**\n * Saturn opposition\n */\nconst soB = [\n [-0.0209, 0.0006, 0.00023],\n [4.5795, -0.0312, -0.00017],\n [1.1462, -0.0351, 0.00011],\n [0.0985, -0.0015],\n [0.0733, -0.0031, 0.00001],\n [0.0025, -0.0001],\n [0.005, -0.0002],\n [0, -0.0337, 0.00018],\n [-0.851, 0.0044, 0.00068],\n [0, -0.0064, 0.00004],\n [0.2397, -0.0012, -0.00008],\n [0, -0.001],\n [0.1245, 0.0006],\n [0, 0.0024, -0.00003],\n [0.0477, -0.0005, -0.00006]\n];\n\n/**\n * Saturn conjunction\n */\nconst scB = [\n [0.0172, -0.0006, 0.00023],\n [-8.5885, 0.0411, 0.00020],\n [-1.147, 0.0352, -0.00011],\n [0.3331, -0.0034, -0.00001],\n [0.1145, -0.0045, 0.00002],\n [-0.0169, 0.0002],\n [-0.0109, 0.0004],\n [0, -0.0337, 0.00018],\n [-0.851, 0.0044, 0.00068],\n [0, -0.0064, 0.00004],\n [0.2397, -0.0012, -0.00008],\n [0, -0.001],\n [0.1245, 0.0006],\n [0, 0.0024, -0.00003],\n [0.0477, -0.0005, -0.00006]\n];\n\n/**\n * Uranus opposition\n */\nconst uoB = [\n [0.0844, -0.0006],\n [-0.1048, 0.0246],\n [-5.1221, 0.0104, 0.00003],\n [-0.1428, 0.0005],\n [-0.0148, -0.0013],\n [0],\n [0.0055],\n [0],\n [0.885],\n [0],\n [0.2153]\n];\n\n/**\n * Neptune opposition [\n */\nconst noB = [\n [-0.014, 0, 0.00001],\n [-1.3486, 0.001, 0.00001],\n [0.8597, 0.0037],\n [-0.0082, -0.0002, 0.00001],\n [0.0037, -0.0003],\n [0],\n [-0.5964],\n [0],\n [0.0728]\n];\n\n/**\n * Table 36.C, p. 259\n */\n\n/**\n * Mercury east time correction\n */\nconst met = [\n [-21.6106, 0.0002],\n [-1.9803, -0.006, 0.00001],\n [1.4151, -0.0072, -0.00001],\n [0.5528, -0.0005, -0.00001],\n [0.2905, 0.0034, 0.00001],\n [-0.1121, -0.0001, 0.00001],\n [-0.0098, -0.0015],\n [0.0192],\n [0.0111, 0.0004],\n [-0.0061],\n [-0.0032, -0.0001]\n];\n\n/**\n * Mercury east elongation\n */\nconst mee = [\n [22.4697],\n [-4.2666, 0.0054, 0.00002],\n [-1.8537, -0.0137],\n [0.3598, 0.0008, -0.00001],\n [-0.068, 0.0026],\n [-0.0524, -0.0003],\n [0.0052, -0.0006],\n [0.0107, 0.0001],\n [-0.0013, 0.0001],\n [-0.0021],\n [0.0003]\n];\n\n/**\n * Mercury west time correction\n */\nconst mwt = [\n [21.6249, -0.0002],\n [0.1306, 0.0065],\n [-2.7661, -0.0011, 0.00001],\n [0.2438, -0.0024, -0.00001],\n [0.5767, 0.0023],\n [0.1041],\n [-0.0184, 0.0007],\n [-0.0051, -0.0001],\n [0.0048, 0.0001],\n [0.0026],\n [0.0037]\n];\n\n/**\n * Mercury west elongation\n */\nconst mwe = [\n [22.4143, -0.0001],\n [4.3651, -0.0048, -0.00002],\n [2.3787, 0.0121, -0.00001],\n [0.2674, 0.0022],\n [-0.3873, 0.0008, 0.00001],\n [-0.0369, -0.0001],\n [0.0017, -0.0001],\n [0.0059],\n [0.0061, 0.0001],\n [0.0007],\n [-0.0011]\n];\n\n/**\n * Table 36.D, p. 261\n */\n\n/**\n * Mars Station 2\n */\nconst ms2 = [\n [36.7191, 0.0016, 0.00003],\n [-12.6163, 0.0417, -0.00001],\n [20.1218, 0.0379, -0.00006],\n [-1.636, -0.019],\n [-3.9657, 0.0045, 0.00007],\n [1.1546, 0.0029, -0.00003],\n [0.2888, -0.0073, -0.00002],\n [-0.3128, 0.0017, 0.00002],\n [0.2513, 0.0026, -0.00002],\n [-0.0021, -0.0016],\n [-0.1497, -0.0006]\n];\n\nvar planetary = {\n mean,\n sum,\n ms,\n mercuryInfConj,\n mercurySupConj,\n venusInfConj,\n marsOpp,\n sumA,\n msa,\n jupiterOpp,\n saturnOpp,\n saturnConj,\n uranusOpp,\n neptuneOpp,\n el,\n mercuryEastElongation,\n mercuryWestElongation,\n marsStation2\n};\n\nexports[\"default\"] = planetary;\nexports.el = el;\nexports.jupiterOpp = jupiterOpp;\nexports.marsOpp = marsOpp;\nexports.marsStation2 = marsStation2;\nexports.mean = mean;\nexports.mercuryEastElongation = mercuryEastElongation;\nexports.mercuryInfConj = mercuryInfConj;\nexports.mercurySupConj = mercurySupConj;\nexports.mercuryWestElongation = mercuryWestElongation;\nexports.ms = ms;\nexports.msa = msa;\nexports.neptuneOpp = neptuneOpp;\nexports.saturnConj = saturnConj;\nexports.saturnOpp = saturnOpp;\nexports.sum = sum;\nexports.sumA = sumA;\nexports.uranusOpp = uranusOpp;\nexports.venusInfConj = venusInfConj;\n", "'use strict';\n\nObject.defineProperty(exports, '__esModule', { value: true });\n\nvar base = require('./base.cjs');\nvar elliptic = require('./elliptic.cjs');\n\n/**\n * @copyright 2013 Sonia Keys\n * @copyright 2016 commenthol\n * @license MIT\n * @module pluto\n */\n\n/**\n * Heliocentric returns J2000 heliocentric coordinates of Pluto.\n *\n * Results l, b are solar longitude and latitude in radians.\n * Result r is distance in AU.\n */\nfunction heliocentric (jde) {\n let l = 0;\n let b = 0;\n let r = 0;\n const T = base[\"default\"].J2000Century(jde);\n const J = 34.35 + 3034.9057 * T;\n const S = 50.08 + 1222.1138 * T;\n const P = 238.96 + 144.96 * T;\n for (const i in t37) {\n const t = t37[i];\n const [s\u03B1, c\u03B1] = base[\"default\"].sincos((t.i * J + t.j * S + t.k * P) * Math.PI / 180);\n l += t.lA * s\u03B1 + t.lB * c\u03B1;\n b += t.bA * s\u03B1 + t.bB * c\u03B1;\n r += t.rA * s\u03B1 + t.rB * c\u03B1;\n }\n l = (l + 238.958116 + 144.96 * T) * Math.PI / 180;\n b = (b - 3.908239) * Math.PI / 180;\n r += 40.7241346;\n return { lon: l, lat: b, range: r }\n}\n\n/**\n * Astrometric returns J2000 astrometric coordinates of Pluto.\n */\nfunction astrometric (jde, earth) {\n const s\u03B5 = base[\"default\"].SOblJ2000;\n const c\u03B5 = base[\"default\"].COblJ2000;\n const f = function (jde) {\n const { lon, lat, range } = heliocentric(jde);\n const [sl, cl] = base[\"default\"].sincos(lon);\n const [sb, cb] = base[\"default\"].sincos(lat);\n // (37.1) p. 264\n const x = range * cl * cb;\n const y = range * (sl * cb * c\u03B5 - sb * s\u03B5);\n const z = range * (sl * cb * s\u03B5 + sb * c\u03B5);\n return { x, y, z }\n };\n const c = elliptic[\"default\"].astrometricJ2000(f, jde, earth); // eslint-disable-line no-unused-vars\n return new base[\"default\"].Coord(c.ra, c.dec)\n}\n\nfunction Pt (i, j, k, lA, lB, bA, bB, rA, rB) {\n this.i = i;\n this.j = j;\n this.k = k;\n this.lA = lA;\n this.lB = lB;\n this.bA = bA;\n this.bB = bB;\n this.rA = rA;\n this.rB = rB;\n}\n\nconst t37 = [\n new Pt(0, 0, 1, -19.799805, 19.850055, -5.452852, -14.974862, 6.6865439, 6.8951812),\n new Pt(0, 0, 2, 0.897144, -4.954829, 3.527812, 1.67279, -1.1827535, -0.0332538),\n new Pt(0, 0, 3, 0.611149, 1.211027, -1.050748, 0.327647, 0.1593179, -0.143889),\n new Pt(0, 0, 4, -0.341243, -0.189585, 0.17869, -0.292153, -0.0018444, 0.048322),\n new Pt(0, 0, 5, 0.129287, -0.034992, 0.01865, 0.10034, -0.0065977, -0.0085431),\n new Pt(0, 0, 6, -0.038164, 0.030893, -0.030697, -0.025823, 0.0031174, -0.0006032),\n new Pt(0, 1, -1, 0.020442, -0.009987, 0.004878, 0.011248, -0.0005794, 0.0022161),\n new Pt(0, 1, 0, -0.004063, -0.005071, 0.000226, -0.000064, 0.0004601, 0.0004032),\n new Pt(0, 1, 1, -0.006016, -0.003336, 0.00203, -0.000836, -0.0001729, 0.0000234),\n new Pt(0, 1, 2, -0.003956, 0.003039, 0.000069, -0.000604, -0.0000415, 0.0000702),\n new Pt(0, 1, 3, -0.000667, 0.003572, -0.000247, -0.000567, 0.0000239, 0.0000723),\n new Pt(0, 2, -2, 0.001276, 0.000501, -0.000057, 0.000001, 0.0000067, -0.0000067),\n new Pt(0, 2, -1, 0.001152, -0.000917, -0.000122, 0.000175, 0.0001034, -0.0000451),\n new Pt(0, 2, 0, 0.00063, -0.001277, -0.000049, -0.000164, -0.0000129, 0.0000504),\n new Pt(1, -1, 0, 0.002571, -0.000459, -0.000197, 0.000199, 0.000048, -0.0000231),\n new Pt(1, -1, 1, 0.000899, -0.001449, -0.000025, 0.000217, 0.0000002, -0.0000441),\n new Pt(1, 0, -3, -0.001016, 0.001043, 0.000589, -0.000248, -0.0003359, 0.0000265),\n new Pt(1, 0, -2, -0.002343, -0.001012, -0.000269, 0.000711, 0.0007856, -0.0007832),\n new Pt(1, 0, -1, 0.007042, 0.000788, 0.000185, 0.000193, 0.0000036, 0.0045763),\n new Pt(1, 0, 0, 0.001199, -0.000338, 0.000315, 0.000807, 0.0008663, 0.0008547),\n new Pt(1, 0, 1, 0.000418, -0.000067, -0.00013, -0.000043, -0.0000809, -0.0000769),\n new Pt(1, 0, 2, 0.00012, -0.000274, 0.000005, 0.000003, 0.0000263, -0.0000144),\n new Pt(1, 0, 3, -0.00006, -0.000159, 0.000002, 0.000017, -0.0000126, 0.0000032),\n new Pt(1, 0, 4, -0.000082, -0.000029, 0.000002, 0.000005, -0.0000035, -0.0000016),\n new Pt(1, 1, -3, -0.000036, -0.000029, 0.000002, 0.000003, -0.0000019, -0.0000004),\n new Pt(1, 1, -2, -0.00004, 0.000007, 0.000003, 0.000001, -0.0000015, 0.0000008),\n new Pt(1, 1, -1, -0.000014, 0.000022, 0.000002, -0.000001, -0.0000004, 0.0000012),\n new Pt(1, 1, 0, 0.000004, 0.000013, 0.000001, -0.000001, 0.0000005, 0.0000006),\n new Pt(1, 1, 1, 0.000005, 0.000002, 0, -0.000001, 0.0000003, 0.0000001),\n new Pt(1, 1, 3, -0.000001, 0, 0, 0, 0.0000006, -0.0000002),\n new Pt(2, 0, -6, 0.000002, 0, 0, -0.000002, 0.0000002, 0.0000002),\n new Pt(2, 0, -5, -0.000004, 0.000005, 0.000002, 0.000002, -0.0000002, -0.0000002),\n new Pt(2, 0, -4, 0.000004, -0.000007, -0.000007, 0, 0.0000014, 0.0000013),\n new Pt(2, 0, -3, 0.000014, 0.000024, 0.00001, -0.000008, -0.0000063, 0.0000013),\n new Pt(2, 0, -2, -0.000049, -0.000034, -0.000003, 0.00002, 0.0000136, -0.0000236),\n new Pt(2, 0, -1, 0.000163, -0.000048, 0.000006, 0.000005, 0.0000273, 0.0001065),\n new Pt(2, 0, 0, 0.000009, -0.000024, 0.000014, 0.000017, 0.0000251, 0.0000149),\n new Pt(2, 0, 1, -0.000004, 0.000001, -0.000002, 0, -0.0000025, -0.0000009),\n new Pt(2, 0, 2, -0.000003, 0.000001, 0, 0, 0.0000009, -0.0000002),\n new Pt(2, 0, 3, 0.000001, 0.000003, 0, 0, -0.0000008, 0.0000007),\n new Pt(3, 0, -2, -0.000003, -0.000001, 0, 0.000001, 0.0000002, -0.000001),\n new Pt(3, 0, -1, 0.000005, -0.000003, 0, 0, 0.0000019, 0.0000035),\n new Pt(3, 0, 0, 0, 0, 0.000001, 0, 0.000001, 0.0000003)\n];\n\nvar pluto = {\n heliocentric,\n astrometric\n};\n\nexports.astrometric = astrometric;\nexports[\"default\"] = pluto;\nexports.heliocentric = heliocentric;\n", "'use strict';\n\nObject.defineProperty(exports, '__esModule', { value: true });\n\nvar sexagesimal = require('./sexagesimal.cjs');\n\n/**\n * @copyright 2013 Sonia Keys\n * @copyright 2016 commenthol\n * @license MIT\n * @module refraction\n */\nconst { sin, tan } = Math;\nconst D2R = Math.PI / 180;\n\nconst gt15true1 = new sexagesimal[\"default\"].Angle(false, 0, 0, 58.294).rad();\nconst gt15true2 = new sexagesimal[\"default\"].Angle(false, 0, 0, 0.0668).rad();\nconst gt15app1 = new sexagesimal[\"default\"].Angle(false, 0, 0, 58.276).rad();\nconst gt15app2 = new sexagesimal[\"default\"].Angle(false, 0, 0, 0.0824).rad();\n\n/**\n * gt15True returns refraction for obtaining true altitude when altitude\n * is greater than 15 degrees (about 0.26 radians.)\n *\n * h0 must be a measured apparent altitude of a celestial body in radians.\n *\n * Result is refraction to be subtracted from h0 to obtain the true altitude\n * of the body. Unit is radians.\n */\nfunction gt15True (h0) { // (h0 float64) float64\n // (16.1) p. 105\n const t = tan(Math.PI / 2 - h0);\n return gt15true1 * t - gt15true2 * t * t * t\n}\n\n/**\n * gt15Apparent returns refraction for obtaining apparent altitude when\n * altitude is greater than 15 degrees (about 0.26 radians.)\n *\n * h must be a computed true \"airless\" altitude of a celestial body in radians.\n *\n * Result is refraction to be added to h to obtain the apparent altitude\n * of the body. Unit is radians.\n */\nfunction gt15Apparent (h) { // (h float64) float64\n // (16.2) p. 105\n const t = tan(Math.PI / 2 - h);\n return gt15app1 * t - gt15app2 * t * t * t\n}\n\n/**\n * Bennett returns refraction for obtaining true altitude.\n *\n * h0 must be a measured apparent altitude of a celestial body in radians.\n *\n * Results are accurate to 0.07 arc min from horizon to zenith.\n *\n * Result is refraction to be subtracted from h0 to obtain the true altitude\n * of the body. Unit is radians.\n */\nfunction bennett (h0) { // (h0 float64) float64\n // (16.3) p. 106\n const c1 = D2R / 60;\n const c731 = 7.31 * D2R * D2R;\n const c44 = 4.4 * D2R;\n return c1 / tan(h0 + c731 / (h0 + c44))\n}\n\n/**\n * Bennett2 returns refraction for obtaining true altitude.\n *\n * Similar to Bennett, but a correction is applied to give a more accurate\n * result.\n *\n * Results are accurate to 0.015 arc min. Result unit is radians.\n */\nfunction bennett2 (h0) { // (h0 float64) float64\n const cMin = 60 / D2R;\n const c06 = 0.06 / cMin;\n const c147 = 14.7 * cMin * D2R;\n const c13 = 13 * D2R;\n const R = bennett(h0);\n return R - c06 * sin(c147 * R + c13)\n}\n\n/**\n * Saemundsson returns refraction for obtaining apparent altitude.\n *\n * h must be a computed true \"airless\" altitude of a celestial body in radians.\n *\n * Result is refraction to be added to h to obtain the apparent altitude\n * of the body.\n *\n * Results are consistent with Bennett to within 4 arc sec.\n * Result unit is radians.\n */\nfunction saemundsson (h) { // (h float64) float64\n // (16.4) p. 106\n const c102 = 1.02 * D2R / 60;\n const c103 = 10.3 * D2R * D2R;\n const c511 = 5.11 * D2R;\n return c102 / tan(h + c103 / (h + c511))\n}\n\nvar refraction = {\n gt15True,\n gt15Apparent,\n bennett,\n bennett2,\n saemundsson\n};\n\nexports.bennett = bennett;\nexports.bennett2 = bennett2;\nexports[\"default\"] = refraction;\nexports.gt15Apparent = gt15Apparent;\nexports.gt15True = gt15True;\nexports.saemundsson = saemundsson;\n", "'use strict';\n\nObject.defineProperty(exports, '__esModule', { value: true });\n\nvar base = require('./base.cjs');\nvar deltat = require('./deltat.cjs');\nvar elliptic = require('./elliptic.cjs');\nvar interpolation = require('./interpolation.cjs');\nvar julian = require('./julian.cjs');\nvar sexagesimal = require('./sexagesimal.cjs');\nvar sidereal = require('./sidereal.cjs');\nrequire('./globe.cjs');\nrequire('./coord.cjs');\nrequire('./nutation.cjs');\n\n/* eslint key-spacing: 1 */\nconst { acos, asin, cos, sin } = Math;\n\n/**\n * @typedef {object} RiseObj\n * @property {number} rise - in seconds\n * @property {number} transit - in seconds\n * @property {number} set - in seconds\n */\n\nconst SECS_PER_DEGREE = 240; // = 86400 / 360\nconst SECS_PER_DAY = 86400;\nconst D2R = Math.PI / 180;\n\nconst errorAboveHorizon = base[\"default\"].errorCode('always above horizon', -1);\nconst errorBelowHorizon = base[\"default\"].errorCode('always below horizon', 1);\n\n/**\n * mean refraction of the atmosphere\n */\nconst meanRefraction = new sexagesimal[\"default\"].Angle(false, 0, 34, 0).rad();\n\n/**\n * \"Standard altitudes\" for various bodies already including `meanRefraction` of 0\u00B034'\n *\n * The standard altitude is the geometric altitude of the center of body\n * at the time of apparent rising or seting.\n */\nconst stdh0 = {\n stellar: -meanRefraction,\n solar: new sexagesimal[\"default\"].Angle(true, 0, 50, 0).rad(),\n // not containing meanRefraction\n lunar: sexagesimal[\"default\"].angleFromDeg(0.7275),\n lunarMean: sexagesimal[\"default\"].angleFromDeg(0.125)\n};\n\n/**\n * Helper function to obtain corrected refraction\n * @param {number} h0 - altitude of the body in radians containing `meanRefraction` of 0\u00B034'\n * @param {number} [corr] - the calcluated refraction e.g. from package `refraction` in radians\n * @return {number} refraction value in radians\n */\nfunction refraction (h0, corr) {\n if (!corr) {\n return h0\n } else {\n return h0 - meanRefraction - corr\n }\n}\n\n/**\n * standard altitude for stars, planets at apparent rising, seting\n */\nconst stdh0Stellar = (_refraction) => refraction(stdh0.stellar, _refraction);\nconst Stdh0Stellar = stdh0Stellar(); // for backward-compatibility\n/**\n * standard altitude for sun for upper limb of the disk\n */\nconst stdh0Solar = (_refraction) => refraction(stdh0.solar, _refraction);\nconst Stdh0Solar = stdh0Solar(); // for backward-compatibility\n\n/**\n * standard altitude for moon (low accuracy)\n */\nconst stdh0LunarMean = (_refraction) => {\n return stdh0.lunarMean - refraction(_refraction)\n};\nconst Stdh0LunarMean = stdh0LunarMean(); // for backward-compatibility\n/**\n * Stdh0Lunar is the standard altitude of the Moon considering \u03C0, the\n * Moon's horizontal parallax.\n * @param {number} \u03C0 - the Moon's horizontal parallax\n * @param {number} [refraction] - optional value for refraction in radians if\n * omitted than meanRefraction is used\n * @return {number} altitude of Moon in radians\n */\nconst stdh0Lunar = (\u03C0, refraction) => {\n return stdh0.lunar * \u03C0 - (refraction || meanRefraction)\n};\nconst Stdh0Lunar = stdh0Lunar; // for backward-compatibility\n\n/**\n * @return {number} local angle in radians\n */\nfunction hourAngle (lat, h0, \u03B4) {\n // approximate local hour angle\n const cosH = (sin(h0) - sin(lat) * sin(\u03B4)) / (cos(lat) * cos(\u03B4)); // (15.1) p. 102\n if (cosH < -1) {\n throw errorAboveHorizon\n } else if (cosH > 1) {\n throw errorBelowHorizon\n }\n const H = acos(cosH);\n return H\n}\n\n/**\n * @param {number} lon - longitude in radians\n * @param {number} \u03B1 - right ascension in radians\n * @param {number} th0 - sidereal.apparent0UT in seconds of day `[0...86400[`\n * @return {number} time of transit in seconds of day `[0, 86400[`\n */\nfunction _mt (lon, \u03B1, th0) {\n // const mt = (((lon + \u03B1) * 180 / Math.PI - (th0 * 360 / 86400)) * 86400 / 360)\n const mt = (lon + \u03B1) * SECS_PER_DEGREE * 180 / Math.PI - th0;\n return mt\n}\n\n/**\n * @param {number} Th0 - sidereal.apparent0UT in seconds of day `[0...86400[`\n * @param {number} m - motion in seconds of day `[0...86400[`\n * @return {number} new siderial time seconds of day `[0...86400[`\n */\nfunction _th0 (Th0, m) {\n // in original formula Th0 = 0...360 and m = 0...1 -> return value would be in 0...360 degrees\n // Th0 /= 240\n // m /= 86400\n const th0 = base[\"default\"].pmod(Th0 + m * 360.985647 / 360, SECS_PER_DAY); // p103\n return th0 // 0...86400 in seconds angle\n}\n\n/**\n * maintain backward compatibility - will be removed in v2\n * return value in future will be an object not an array\n * @private\n * @param {RiseObj} rs\n * @return {RiseObj}\n */\nfunction _compatibility (rs) {\n const _rs = [rs.rise, rs.transit, rs.set];\n _rs.rise = rs.rise;\n _rs.transit = rs.transit;\n _rs.set = rs.set;\n return _rs\n}\n\n/**\n * ApproxTimes computes approximate UT rise, transit and set times for\n * a celestial object on a day of interest.\n *\n * The function argurments do not actually include the day, but do include\n * values computed from the day.\n *\n * @param {GlobeCoord} p - is geographic coordinates of observer.\n * @param {number} h0 - is \"standard altitude\" of the body in radians\n * @param {number} Th0 - is apparent sidereal time at 0h UT at Greenwich in seconds\n * (range 0...86400) must be the time on the day of interest, in seconds.\n * See sidereal.apparent0UT\n * @param {number} \u03B1 - right ascension (radians)\n * @param {number} \u03B4 - declination (radians)\n * @return {RiseObj} Result units are seconds and are in the range [0,86400)\n * @throws Error\n */\nfunction approxTimes (p, h0, Th0, \u03B1, \u03B4) {\n const H0 = hourAngle(p.lat, h0, \u03B4) * SECS_PER_DEGREE * 180 / Math.PI; // in degrees per day === seconds\n // approximate transit, rise, set times.\n // (15.2) p. 102.0\n const mt = _mt(p.lon, \u03B1, Th0);\n const rs = {};\n rs.transit = base[\"default\"].pmod(mt, SECS_PER_DAY);\n rs.rise = base[\"default\"].pmod(mt - H0, SECS_PER_DAY);\n rs.set = base[\"default\"].pmod(mt + H0, SECS_PER_DAY);\n return _compatibility(rs)\n}\n\n/**\n * Times computes UT rise, transit and set times for a celestial object on\n * a day of interest.\n *\n * The function argurments do not actually include the day, but do include\n * a number of values computed from the day.\n *\n * @param {GlobeCoord} p - is geographic coordinates of observer.\n * @param {number} \u0394T - is delta T in seconds\n * @param {number} h0 - is \"standard altitude\" of the body in radians\n * @param {number} Th0 - is apparent sidereal time at 0h UT at Greenwich in seconds\n * (range 0...86400) must be the time on the day of interest, in seconds.\n * See sidereal.apparent0UT\n * @param {Array} \u03B13 - slices of three right ascensions\n * @param {Array} \u03B43 - slices of three declinations.\n * \u03B13, \u03B43 must be values at 0h dynamical time for the day before, the day of,\n * and the day after the day of interest. Units are radians.\n *\n * @return {RiseObj} Result units are seconds and are in the range [0,86400)\n * @throws Error\n */\nfunction times (p, \u0394T, h0, Th0, \u03B13, \u03B43) { // (p globe.Coord, \u0394T, h0, Th0 float64, \u03B13, \u03B43 []float64) (mRise, mTransit, mSet float64, err error)\n const rs = approxTimes(p, h0, Th0, \u03B13[1], \u03B43[1]);\n const d3\u03B1 = new interpolation[\"default\"].Len3(-SECS_PER_DAY, SECS_PER_DAY, \u03B13);\n const d3\u03B4 = new interpolation[\"default\"].Len3(-SECS_PER_DAY, SECS_PER_DAY, \u03B43);\n\n // adjust mTransit\n const ut = rs.transit + \u0394T;\n const \u03B1 = d3\u03B1.interpolateX(ut);\n const th0 = _th0(Th0, rs.transit);\n const H = -1 * _mt(p.lon, \u03B1, th0); // in secs // Hmeus = 0...360\n rs.transit -= H;\n\n // adjust mRise, mSet\n const [sLat, cLat] = base[\"default\"].sincos(p.lat);\n\n const adjustRS = function (m) {\n const ut = m + \u0394T;\n const \u03B1 = d3\u03B1.interpolateX(ut);\n const \u03B4 = d3\u03B4.interpolateX(ut);\n const th0 = _th0(Th0, m);\n const H = -1 * _mt(p.lon, \u03B1, th0);\n const Hrad = (H / SECS_PER_DEGREE) * D2R;\n const h = asin(((sLat * sin(\u03B4)) + (cLat * cos(\u03B4) * cos(Hrad)))); // formula 13.6\n const \u0394m = (SECS_PER_DAY * (h - h0) / (cos(\u03B4) * cLat * sin(Hrad) * 2 * Math.PI)); // formula p103 3\n return m + \u0394m\n };\n\n rs.rise = adjustRS(rs.rise);\n rs.set = adjustRS(rs.set);\n\n return _compatibility(rs)\n}\n\n/**\n * RisePlanet computes rise, transit and set times for a planet on a day of interest.\n */\nclass PlanetRise {\n /**\n * @param {number|Date} jd - Julian Day starting at midnight or Date object\n * @param {number} lat - geographic latitude of the observerin degrees\n * @param {number} lon - geographic longitude of the observer in degrees (measured positively westward)\n * @param {Planet} earth - VSOP87 Planet object for Earth\n * @param {Planet} planet - VSOP87 Planet object of observed body\n * @param {object} [opts]\n * @param {boolean} [opts.date] - return times as Date objects\n * @param {number} [opts.refraction] - use different refraction than `stdh0Stellar`\n */\n constructor (jd, lat, lon, earth, planet, opts) {\n this.opts = opts || {};\n this.refraction = this.opts.refraction || stdh0Stellar();\n if (jd instanceof Date) {\n jd = new julian[\"default\"].Calendar().fromDate(jd).toJD();\n }\n this.jd = Math.floor(jd - 0.5) + 0.5; // start at midnight\n this.lat = lat * D2R; // convert to radians\n this.lon = lon * D2R;\n const cal = new julian[\"default\"].Calendar().fromJD(this.jd);\n this.jde = cal.toJDE();\n this.\u0394T = deltat[\"default\"].deltaT(cal.toYear());\n this.earth = earth;\n this.planet = planet;\n }\n\n approxTimes () {\n const body = elliptic[\"default\"].position(this.planet, this.earth, this.jde);\n const Th0 = sidereal[\"default\"].apparent0UT(this.jd);\n const rs = approxTimes(\n { lat: this.lat, lon: this.lon }, this.refraction,\n Th0, body.ra, body.dec\n );\n return this._rsToJD(rs)\n }\n\n times () {\n const body = [\n elliptic[\"default\"].position(this.planet, this.earth, this.jde - 1),\n elliptic[\"default\"].position(this.planet, this.earth, this.jde),\n elliptic[\"default\"].position(this.planet, this.earth, this.jde + 1)\n ];\n const Th0 = sidereal[\"default\"].apparent0UT(this.jd);\n const rs = times(\n { lat: this.lat, lon: this.lon }, this.\u0394T, this.refraction,\n Th0, this._toArr(body, 'ra'), this._toArr(body, 'dec')\n );\n return this._rsToJD(rs)\n }\n\n /** @private */\n _toArr (body, p) {\n return body.map((item) => {\n return item[p]\n })\n }\n\n /** @private */\n _rsToJD (rs) {\n return {\n rise: this._toJD(rs.rise),\n transit: this._toJD(rs.transit),\n set: this._toJD(rs.set)\n }\n }\n\n /** @private */\n _toJD (secs) {\n const jd = this.jd + secs / 86400;\n if (this.opts.date) {\n return new julian[\"default\"].Calendar().fromJD(jd).toDate()\n } else {\n return jd\n }\n }\n}\n\nvar rise = {\n errorAboveHorizon,\n errorBelowHorizon,\n meanRefraction,\n stdh0,\n refraction,\n stdh0Stellar,\n Stdh0Stellar,\n stdh0Solar,\n Stdh0Solar,\n stdh0LunarMean,\n Stdh0LunarMean,\n stdh0Lunar,\n Stdh0Lunar,\n hourAngle,\n approxTimes,\n times,\n PlanetRise\n};\n\nexports.PlanetRise = PlanetRise;\nexports.Stdh0Lunar = Stdh0Lunar;\nexports.Stdh0LunarMean = Stdh0LunarMean;\nexports.Stdh0Solar = Stdh0Solar;\nexports.Stdh0Stellar = Stdh0Stellar;\nexports.approxTimes = approxTimes;\nexports[\"default\"] = rise;\nexports.errorAboveHorizon = errorAboveHorizon;\nexports.errorBelowHorizon = errorBelowHorizon;\nexports.hourAngle = hourAngle;\nexports.meanRefraction = meanRefraction;\nexports.refraction = refraction;\nexports.stdh0 = stdh0;\nexports.stdh0Lunar = stdh0Lunar;\nexports.stdh0LunarMean = stdh0LunarMean;\nexports.stdh0Solar = stdh0Solar;\nexports.stdh0Stellar = stdh0Stellar;\nexports.times = times;\n", "'use strict';\n\nObject.defineProperty(exports, '__esModule', { value: true });\n\nvar base = require('./base.cjs');\nvar coord = require('./coord.cjs');\nvar planetposition = require('./planetposition.cjs');\nvar precess = require('./precess.cjs');\nvar solar = require('./solar.cjs');\n\n/**\n * @copyright 2013 Sonia Keys\n * @copyright 2016 commenthol\n * @license MIT\n * @module saturnmoons\n */\n\n// array positions of Saturnmoons returned from positions().\nconst mimas = 0;\nconst enceladus = 1;\nconst tethys = 2;\nconst dione = 3;\nconst rhea = 4;\nconst titan = 5;\nconst hyperion = 6;\nconst iapetus = 7;\n\n/**\n * XY holds coordinates returned from positions().\n */\nfunction XY (x, y) {\n this.x = x;\n this.y = y;\n}\n\nconst d = Math.PI / 180;\n\n/**\n * Positions returns positions of the eight major moons of Saturn.\n *\n * Results returned in argument pos, which must not be undefined.\n *\n * Result units are Saturn radii.\n *\n * @param {number} jde - Julian ephemeris day\n * @param {Planet} earth - VSOP87 planet Earth // eslint-disable-line no-unused-vars\n * @param {Planet} saturn - VSOP87 planet Saturn // eslint-disable-line no-unused-vars\n * @return {XY[]} Array of Moon Positions in `XY`\n * Use `M.mimas ... M.iapetus` to resolve to Moon and its position at `jde`\n */\nfunction positions (jde, earth, saturn) {\n const sol = solar[\"default\"].trueVSOP87(earth, jde);\n const [s, \u03B2, R] = [sol.lon, sol.lat, sol.range];\n const [ss, cs] = base[\"default\"].sincos(s);\n const s\u03B2 = Math.sin(\u03B2);\n let \u0394 = 9.0;\n let x;\n let y;\n let z = 0;\n let _jde;\n\n const f = function () {\n const \u03C4 = base[\"default\"].lightTime(\u0394);\n _jde = jde - \u03C4;\n const { lon, lat, range } = saturn.position(_jde);\n const fk5 = planetposition[\"default\"].toFK5(lon, lat, _jde); // eslint-disable-line no-unused-vars\n const [l, b] = [fk5.lon, fk5.lat];\n const [sl, cl] = base[\"default\"].sincos(l);\n const [sb, cb] = base[\"default\"].sincos(b);\n x = range * cb * cl + R * cs;\n y = range * cb * sl + R * ss;\n z = range * sb + R * s\u03B2;\n \u0394 = Math.sqrt(x * x + y * y + z * z);\n };\n f();\n f();\n\n let \u03BB0 = Math.atan2(y, x);\n let \u03B20 = Math.atan(z / Math.hypot(x, y));\n let ecl = new coord[\"default\"].Ecliptic(\u03BB0, \u03B20);\n ecl = precess[\"default\"].eclipticPosition(ecl, base[\"default\"].JDEToJulianYear(jde), base[\"default\"].JDEToJulianYear(base[\"default\"].B1950));\n \u03BB0 = ecl.lon;\n \u03B20 = ecl.lat;\n const q = new Qs(_jde);\n const s4 = [\n new R4(), // 0 unused\n q.mimas(),\n q.enceladus(),\n q.tethys(),\n q.dione(),\n q.rhea(),\n q.titan(),\n q.hyperion(),\n q.iapetus()\n ];\n\n const X = new Array(9).fill(0);\n const Y = new Array(9).fill(0);\n const Z = new Array(9).fill(0);\n for (let j = 1; j <= 8; j++) {\n const u = s4[j].\u03BB - s4[j].\u03A9;\n const w = s4[j].\u03A9 - 168.8112 * d;\n const [su, cu] = base[\"default\"].sincos(u);\n const [sw, cw] = base[\"default\"].sincos(w);\n const [s\u03B3, c\u03B3] = base[\"default\"].sincos(s4[j].\u03B3);\n const r = s4[j].r;\n X[j] = r * (cu * cw - su * c\u03B3 * sw);\n Y[j] = r * (su * cw * c\u03B3 + cu * sw);\n Z[j] = r * su * s\u03B3;\n }\n Z[0] = 1;\n const [s\u03BB0, c\u03BB0] = base[\"default\"].sincos(\u03BB0);\n const [s\u03B20, c\u03B20] = base[\"default\"].sincos(\u03B20);\n const A = new Array(9).fill(0);\n const B = new Array(9).fill(0);\n const C = new Array(9).fill(0);\n for (const j in X) {\n let a = X[j];\n let b = q.c1 * Y[j] - q.s1 * Z[j];\n const c = q.s1 * Y[j] + q.c1 * Z[j];\n const a0 = q.c2 * a - q.s2 * b;\n b = q.s2 * a + q.c2 * b;\n a = a0;\n\n A[j] = a * s\u03BB0 - b * c\u03BB0;\n b = a * c\u03BB0 + b * s\u03BB0;\n\n B[j] = b * c\u03B20 + c * s\u03B20;\n C[j] = c * c\u03B20 - b * s\u03B20;\n }\n\n const pos = new Array(9);\n const D = Math.atan2(A[0], C[0]);\n const [sD, cD] = base[\"default\"].sincos(D);\n for (let j = 1; j <= 8; j++) {\n X[j] = A[j] * cD - C[j] * sD;\n Y[j] = A[j] * sD + C[j] * cD;\n Z[j] = B[j];\n const d = X[j] / s4[j].r;\n X[j] += Math.abs(Z[j]) / k[j] * Math.sqrt(1 - d * d);\n const W = \u0394 / (\u0394 + Z[j] / 2475);\n pos[j - 1] = new XY(X[j] * W, Y[j] * W);\n }\n return pos\n}\n\nconst k = [0, 20947, 23715, 26382, 29876, 35313, 53800, 59222, 91820];\n\nfunction R4 (\u03BB, r, \u03B3, \u03A9) {\n this.\u03BB = \u03BB || 0;\n this.r = r || 0;\n this.\u03B3 = \u03B3 || 0;\n this.\u03A9 = \u03A9 || 0;\n}\n\nfunction Qs (jde) {\n this.t1 = jde - 2411093;\n this.t2 = this.t1 / 365.25;\n this.t3 = (jde - 2433282.423) / 365.25 + 1950;\n this.t4 = jde - 2411368;\n this.t5 = this.t4 / 365.25;\n this.t6 = jde - 2415020;\n this.t7 = this.t6 / 36525;\n this.t8 = this.t6 / 365.25;\n this.t9 = (jde - 2442000.5) / 365.25;\n this.t10 = jde - 2409786;\n this.t11 = this.t10 / 36525;\n this.W0 = 5.095 * d * (this.t3 - 1866.39);\n this.W1 = 74.4 * d + 32.39 * d * this.t2;\n this.W2 = 134.3 * d + 92.62 * d * this.t2;\n this.W3 = 42 * d - 0.5118 * d * this.t5;\n this.W4 = 276.59 * d + 0.5118 * d * this.t5;\n this.W5 = 267.2635 * d + 1222.1136 * d * this.t7;\n this.W6 = 175.4762 * d + 1221.5515 * d * this.t7;\n this.W7 = 2.4891 * d + 0.002435 * d * this.t7;\n this.W8 = 113.35 * d - 0.2597 * d * this.t7;\n this.s1 = Math.sin(28.0817 * d);\n this.c1 = Math.cos(28.0817 * d);\n this.s2 = Math.sin(168.8112 * d);\n this.c2 = Math.cos(168.8112 * d);\n this.e1 = 0.05589 - 0.000346 * this.t7;\n this.sW0 = Math.sin(this.W0);\n this.s3W0 = Math.sin(3 * this.W0);\n this.s5W0 = Math.sin(5 * this.W0);\n this.sW1 = Math.sin(this.W1);\n this.sW2 = Math.sin(this.W2);\n this.sW3 = Math.sin(this.W3);\n this.cW3 = Math.cos(this.W3);\n this.sW4 = Math.sin(this.W4);\n this.cW4 = Math.cos(this.W4);\n this.sW7 = Math.sin(this.W7);\n this.cW7 = Math.cos(this.W7);\n return this\n}\n\nQs.prototype.mimas = function () {\n const r = new R4();\n const L = 127.64 * d + 381.994497 * d * this.t1 -\n 43.57 * d * this.sW0 - 0.72 * d * this.s3W0 - 0.02144 * d * this.s5W0;\n const p = 106.1 * d + 365.549 * d * this.t2;\n const M = L - p;\n const C = 2.18287 * d * Math.sin(M) +\n 0.025988 * d * Math.sin(2 * M) + 0.00043 * d * Math.sin(3 * M);\n r.\u03BB = L + C;\n r.r = 3.06879 / (1 + 0.01905 * Math.cos(M + C));\n r.\u03B3 = 1.563 * d;\n r.\u03A9 = 54.5 * d - 365.072 * d * this.t2;\n return r\n};\n\nQs.prototype.enceladus = function () {\n const r = new R4();\n const L = 200.317 * d + 262.7319002 * d * this.t1 + 0.25667 * d * this.sW1 + 0.20883 * d * this.sW2;\n const p = 309.107 * d + 123.44121 * d * this.t2;\n const M = L - p;\n const C = 0.55577 * d * Math.sin(M) + 0.00168 * d * Math.sin(2 * M);\n r.\u03BB = L + C;\n r.r = 3.94118 / (1 + 0.00485 * Math.cos(M + C));\n r.\u03B3 = 0.0262 * d;\n r.\u03A9 = 348 * d - 151.95 * d * this.t2;\n return r\n};\n\nQs.prototype.tethys = function () {\n const r = new R4();\n r.\u03BB = 285.306 * d + 190.69791226 * d * this.t1 +\n 2.063 * d * this.sW0 + 0.03409 * d * this.s3W0 + 0.001015 * d * this.s5W0;\n r.r = 4.880998;\n r.\u03B3 = 1.0976 * d;\n r.\u03A9 = 111.33 * d - 72.2441 * d * this.t2;\n return r\n};\n\nQs.prototype.dione = function () {\n const r = new R4();\n const L = 254.712 * d + 131.53493193 * d * this.t1 - 0.0215 * d * this.sW1 - 0.01733 * d * this.sW2;\n const p = 174.8 * d + 30.82 * d * this.t2;\n const M = L - p;\n const C = 0.24717 * d * Math.sin(M) + 0.00033 * d * Math.sin(2 * M);\n r.\u03BB = L + C;\n r.r = 6.24871 / (1 + 0.002157 * Math.cos(M + C));\n r.\u03B3 = 0.0139 * d;\n r.\u03A9 = 232 * d - 30.27 * d * this.t2;\n return r\n};\n\nQs.prototype.rhea = function () {\n const p\u02B9 = 342.7 * d + 10.057 * d * this.t2;\n const [sp\u02B9, cp\u02B9] = base[\"default\"].sincos(p\u02B9);\n const a1 = 0.000265 * sp\u02B9 + 0.001 * this.sW4;\n const a2 = 0.000265 * cp\u02B9 + 0.001 * this.cW4;\n const e = Math.hypot(a1, a2);\n const p = Math.atan2(a1, a2);\n const N = 345 * d - 10.057 * d * this.t2;\n const [sN, cN] = base[\"default\"].sincos(N);\n const \u03BB\u02B9 = 359.244 * d + 79.6900472 * d * this.t1 + 0.086754 * d * sN;\n const i = 28.0362 * d + 0.346898 * d * cN + 0.0193 * d * this.cW3;\n const \u03A9 = 168.8034 * d + 0.736936 * d * sN + 0.041 * d * this.sW3;\n const a = 8.725924;\n return this.subr(\u03BB\u02B9, p, e, a, \u03A9, i)\n};\n\nQs.prototype.subr = function (\u03BB\u02B9, p, e, a, \u03A9, i) {\n const r = new R4();\n const M = \u03BB\u02B9 - p;\n const e2 = e * e;\n const e3 = e2 * e;\n const e4 = e2 * e2;\n const e5 = e3 * e2;\n const C = (2 * e - 0.25 * e3 + 0.0520833333 * e5) * Math.sin(M) +\n (1.25 * e2 - 0.458333333 * e4) * Math.sin(2 * M) +\n (1.083333333 * e3 - 0.671875 * e5) * Math.sin(3 * M) +\n 1.072917 * e4 * Math.sin(4 * M) + 1.142708 * e5 * Math.sin(5 * M);\n r.r = a * (1 - e2) / (1 + e * Math.cos(M + C)); // return value\n const g = \u03A9 - 168.8112 * d;\n const [si, ci] = base[\"default\"].sincos(i);\n const [sg, cg] = base[\"default\"].sincos(g);\n const a1 = si * sg;\n const a2 = this.c1 * si * cg - this.s1 * ci;\n r.\u03B3 = Math.asin(Math.hypot(a1, a2)); // return value\n const u = Math.atan2(a1, a2);\n r.\u03A9 = 168.8112 * d + u; // return value (w)\n const h = this.c1 * si - this.s1 * ci * cg;\n const \u03C8 = Math.atan2(this.s1 * sg, h);\n r.\u03BB = \u03BB\u02B9 + C + u - g - \u03C8; // return value\n return r\n};\n\nQs.prototype.titan = function () {\n const L = 261.1582 * d + 22.57697855 * d * this.t4 + 0.074025 * d * this.sW3;\n const i\u02B9 = 27.45141 * d + 0.295999 * d * this.cW3;\n const \u03A9\u02B9 = 168.66925 * d + 0.628808 * d * this.sW3;\n const [si\u02B9, ci\u02B9] = base[\"default\"].sincos(i\u02B9);\n const [s\u03A9\u02B9W8, c\u03A9\u02B9W8] = base[\"default\"].sincos(\u03A9\u02B9 - this.W8);\n const a1 = this.sW7 * s\u03A9\u02B9W8;\n const a2 = this.cW7 * si\u02B9 - this.sW7 * ci\u02B9 * c\u03A9\u02B9W8;\n const g0 = 102.8623 * d;\n const \u03C8 = Math.atan2(a1, a2);\n const s = Math.hypot(a1, a2);\n let g = this.W4 - \u03A9\u02B9 - \u03C8;\n let \u03D6 = 0;\n const [s2g0, c2g0] = base[\"default\"].sincos(2 * g0);\n const f = () => {\n \u03D6 = this.W4 + 0.37515 * d * (Math.sin(2 * g) - s2g0);\n g = \u03D6 - \u03A9\u02B9 - \u03C8;\n };\n f();\n f();\n f();\n const e\u02B9 = 0.029092 + 0.00019048 * (Math.cos(2 * g) - c2g0);\n const qq = 2 * (this.W5 - \u03D6);\n const b1 = si\u02B9 * s\u03A9\u02B9W8;\n const b2 = this.cW7 * si\u02B9 * c\u03A9\u02B9W8 - this.sW7 * ci\u02B9;\n const \u03B8 = Math.atan2(b1, b2) + this.W8;\n const [sq, cq] = base[\"default\"].sincos(qq);\n const e = e\u02B9 + 0.002778797 * e\u02B9 * cq;\n const p = \u03D6 + 0.159215 * d * sq;\n const u = 2 * this.W5 - 2 * \u03B8 + \u03C8;\n const [su, cu] = base[\"default\"].sincos(u);\n const h = 0.9375 * e\u02B9 * e\u02B9 * sq + 0.1875 * s * s * Math.sin(2 * (this.W5 - \u03B8));\n const \u03BB\u02B9 = L - 0.254744 * d *\n (this.e1 * Math.sin(this.W6) + 0.75 * this.e1 * this.e1 * Math.sin(2 * this.W6) + h);\n const i = i\u02B9 + 0.031843 * d * s * cu;\n const \u03A9 = \u03A9\u02B9 + 0.031843 * d * s * su / si\u02B9;\n const a = 20.216193;\n return this.subr(\u03BB\u02B9, p, e, a, \u03A9, i)\n};\n\nQs.prototype.hyperion = function () {\n const \u03B7 = 92.39 * d + 0.5621071 * d * this.t6;\n const \u03B6 = 148.19 * d - 19.18 * d * this.t8;\n const \u03B8 = 184.8 * d - 35.41 * d * this.t9;\n const \u03B8\u02B9 = \u03B8 - 7.5 * d;\n const as = 176 * d + 12.22 * d * this.t8;\n const bs = 8 * d + 24.44 * d * this.t8;\n const cs = bs + 5 * d;\n const \u03D6 = 69.898 * d - 18.67088 * d * this.t8;\n const \u03C6 = 2 * (\u03D6 - this.W5);\n const \u03C7 = 94.9 * d - 2.292 * d * this.t8;\n const [s\u03B7, c\u03B7] = base[\"default\"].sincos(\u03B7);\n const [s\u03B6, c\u03B6] = base[\"default\"].sincos(\u03B6);\n const [s2\u03B6, c2\u03B6] = base[\"default\"].sincos(2 * \u03B6);\n const [s3\u03B6, c3\u03B6] = base[\"default\"].sincos(3 * \u03B6);\n const [s\u03B6p\u03B7, c\u03B6p\u03B7] = base[\"default\"].sincos(\u03B6 + \u03B7);\n const [s\u03B6m\u03B7, c\u03B6m\u03B7] = base[\"default\"].sincos(\u03B6 - \u03B7);\n const [s\u03C6, c\u03C6] = base[\"default\"].sincos(\u03C6);\n const [s\u03C7, c\u03C7] = base[\"default\"].sincos(\u03C7);\n const [scs, ccs] = base[\"default\"].sincos(cs);\n const a = 24.50601 - 0.08686 * c\u03B7 - 0.00166 * c\u03B6p\u03B7 + 0.00175 * c\u03B6m\u03B7;\n const e = 0.103458 - 0.004099 * c\u03B7 - 0.000167 * c\u03B6p\u03B7 + 0.000235 * c\u03B6m\u03B7 +\n 0.02303 * c\u03B6 - 0.00212 * c2\u03B6 + 0.000151 * c3\u03B6 + 0.00013 * c\u03C6;\n const p = \u03D6 + 0.15648 * d * s\u03C7 - 0.4457 * d * s\u03B7 - 0.2657 * d * s\u03B6p\u03B7 - 0.3573 * d * s\u03B6m\u03B7 -\n 12.872 * d * s\u03B6 + 1.668 * d * s2\u03B6 - 0.2419 * d * s3\u03B6 - 0.07 * d * s\u03C6;\n const \u03BB\u02B9 = 177.047 * d + 16.91993829 * d * this.t6 + 0.15648 * d * s\u03C7 + 9.142 * d * s\u03B7 +\n 0.007 * d * Math.sin(2 * \u03B7) - 0.014 * d * Math.sin(3 * \u03B7) + 0.2275 * d * s\u03B6p\u03B7 +\n 0.2112 * d * s\u03B6m\u03B7 - 0.26 * d * s\u03B6 - 0.0098 * d * s2\u03B6 -\n 0.013 * d * Math.sin(as) + 0.017 * d * Math.sin(bs) - 0.0303 * d * s\u03C6;\n const i = 27.3347 * d + 0.6434886 * d * c\u03C7 + 0.315 * d * this.cW3 + 0.018 * d * Math.cos(\u03B8) -\n 0.018 * d * ccs;\n const \u03A9 = 168.6812 * d + 1.40136 * d * c\u03C7 + 0.68599 * d * this.sW3 - 0.0392 * d * scs +\n 0.0366 * d * Math.sin(\u03B8\u02B9);\n return this.subr(\u03BB\u02B9, p, e, a, \u03A9, i)\n};\n\nQs.prototype.iapetus = function () {\n const L = 261.1582 * d + 22.57697855 * d * this.t4;\n const \u03D6\u02B9 = 91.796 * d + 0.562 * d * this.t7;\n const \u03C8 = 4.367 * d - 0.195 * d * this.t7;\n const \u03B8 = 146.819 * d - 3.198 * d * this.t7;\n const \u03C6 = 60.47 * d + 1.521 * d * this.t7;\n const \u03A6 = 205.055 * d - 2.091 * d * this.t7;\n const e\u02B9 = 0.028298 + 0.001156 * this.t11;\n const \u03D60 = 352.91 * d + 11.71 * d * this.t11;\n const \u03BC = 76.3852 * d + 4.53795125 * d * this.t10;\n const i\u02B9 = base[\"default\"].horner(this.t11, 18.4602 * d, -0.9518 * d, -0.072 * d, 0.0054 * d);\n const \u03A9\u02B9 = base[\"default\"].horner(this.t11, 143.198 * d, -3.919 * d, 0.116 * d, 0.008 * d);\n const l = \u03BC - \u03D60;\n const g = \u03D60 - \u03A9\u02B9 - \u03C8;\n const g1 = \u03D60 - \u03A9\u02B9 - \u03C6;\n const ls = this.W5 - \u03D6\u02B9;\n const gs = \u03D6\u02B9 - \u03B8;\n const lT = L - this.W4;\n const gT = this.W4 - \u03A6;\n const u1 = 2 * (l + g - ls - gs);\n const u2 = l + g1 - lT - gT;\n const u3 = l + 2 * (g - ls - gs);\n const u4 = lT + gT - g1;\n const u5 = 2 * (ls + gs);\n const [sl, cl] = base[\"default\"].sincos(l);\n const [su1, cu1] = base[\"default\"].sincos(u1);\n const [su2, cu2] = base[\"default\"].sincos(u2);\n const [su3, cu3] = base[\"default\"].sincos(u3);\n const [su4, cu4] = base[\"default\"].sincos(u4);\n const [slu2, clu2] = base[\"default\"].sincos(l + u2);\n const [sg1gT, cg1gT] = base[\"default\"].sincos(g1 - gT);\n const [su52g, cu52g] = base[\"default\"].sincos(u5 - 2 * g);\n const [su5\u03C8, cu5\u03C8] = base[\"default\"].sincos(u5 + \u03C8);\n const [su2\u03C6, cu2\u03C6] = base[\"default\"].sincos(u2 + \u03C6);\n const [s5, c5] = base[\"default\"].sincos(l + g1 + lT + gT + \u03C6);\n const a = 58.935028 + 0.004638 * cu1 + 0.058222 * cu2;\n const e = e\u02B9 - 0.0014097 * cg1gT + 0.0003733 * cu52g +\n 0.000118 * cu3 + 0.0002408 * cl + 0.0002849 * clu2 + 0.000619 * cu4;\n const w = 0.08077 * d * sg1gT + 0.02139 * d * su52g - 0.00676 * d * su3 +\n 0.0138 * d * sl + 0.01632 * d * slu2 + 0.03547 * d * su4;\n const p = \u03D60 + w / e\u02B9;\n const \u03BB\u02B9 = \u03BC - 0.04299 * d * su2 - 0.00789 * d * su1 - 0.06312 * d * Math.sin(ls) -\n 0.00295 * d * Math.sin(2 * ls) - 0.02231 * d * Math.sin(u5) + 0.0065 * d * su5\u03C8;\n const i = i\u02B9 + 0.04204 * d * cu5\u03C8 + 0.00235 * d * c5 + 0.0036 * d * cu2\u03C6;\n const w\u02B9 = 0.04204 * d * su5\u03C8 + 0.00235 * d * s5 + 0.00358 * d * su2\u03C6;\n const \u03A9 = \u03A9\u02B9 + w\u02B9 / Math.sin(i\u02B9);\n return this.subr(\u03BB\u02B9, p, e, a, \u03A9, i)\n};\n\nvar saturnmoons = {\n mimas,\n enceladus,\n tethys,\n dione,\n rhea,\n titan,\n hyperion,\n iapetus,\n positions,\n Qs\n};\n\nexports.Qs = Qs;\nexports[\"default\"] = saturnmoons;\nexports.dione = dione;\nexports.enceladus = enceladus;\nexports.hyperion = hyperion;\nexports.iapetus = iapetus;\nexports.mimas = mimas;\nexports.positions = positions;\nexports.rhea = rhea;\nexports.tethys = tethys;\nexports.titan = titan;\n", "'use strict';\n\nObject.defineProperty(exports, '__esModule', { value: true });\n\nvar base = require('./base.cjs');\nvar coord = require('./coord.cjs');\nvar nutation = require('./nutation.cjs');\nvar planetposition = require('./planetposition.cjs');\n\n/**\n * @copyright 2013 Sonia Keys\n * @copyright 2016 commenthol\n * @license MIT\n * @module saturnring\n */\n\n/**\n * Ring computes quantities of the ring of Saturn.\n *\n * B Saturnicentric latitude of the Earth referred to the plane of the ring.\n * B\u02B9 Saturnicentric latitude of the Sun referred to the plane of the ring.\n * \u0394U Difference between Saturnicentric longitudes of the Sun and the Earth.\n * P Geometric position angle of the northern semiminor axis of the ring.\n * aEdge Major axis of the out edge of the outer ring.\n * bEdge Minor axis of the out edge of the outer ring.\n *\n * All results in radians.\n */\nfunction ring (jde, earth, saturn) { // (jde float64, earth, saturn *pp.V87Planet) (B, B\u02B9, \u0394U, P, aEdge, bEdge float64)\n const [f1, f2] = cl(jde, earth, saturn);\n const [\u0394U, B] = f1();\n const [B\u02B9, P, aEdge, bEdge] = f2();\n return [B, B\u02B9, \u0394U, P, aEdge, bEdge]\n}\n\n/**\n * UB computes quantities required by illum.Saturn().\n *\n * Same as \u0394U and B returned by Ring(). Results in radians.\n */\nfunction ub (jde, earth, saturn) { // (jde float64, earth, saturn *pp.V87Planet) (\u0394U, B float64)\n const [f1, f2] = cl(jde, earth, saturn); // eslint-disable-line no-unused-vars\n return f1()\n}\n\n/**\n * cl splits the work into two closures.\n */\nfunction cl (jde, earth, saturn) { // (jde float64, earth, saturn *pp.V87Planet) (f1 func() (\u0394U, B float64),\n // f2 func() (B\u02B9, P, aEdge, bEdge float64))\n const p = Math.PI / 180;\n let i, \u03A9;\n let l0, b0, R;\n let \u0394 = 9.0;\n let \u03BB, \u03B2;\n let si, ci, s\u03B2, c\u03B2, sB;\n let sb\u02B9, cb\u02B9, sl\u02B9\u03A9, cl\u02B9\u03A9;\n const f1 = function () { // (\u0394U, B float64)\n // (45.1), p. 318\n const T = base[\"default\"].J2000Century(jde);\n i = base[\"default\"].horner(T, 28.075216 * p, -0.012998 * p, 0.000004 * p);\n \u03A9 = base[\"default\"].horner(T, 169.50847 * p, 1.394681 * p, 0.000412 * p);\n // Step 2.0\n const earthPos = earth.position(jde);\n R = earthPos.range;\n const fk5 = planetposition[\"default\"].toFK5(earthPos.lon, earthPos.lat, jde);\n l0 = fk5.lon;\n b0 = fk5.lat;\n const [sl0, cl0] = base[\"default\"].sincos(l0);\n const sb0 = Math.sin(b0);\n // Steps 3, 4.0\n let l = 0;\n let b = 0;\n let r = 0;\n let x = 0;\n let y = 0;\n let z = 0;\n\n const f = function () {\n const \u03C4 = base[\"default\"].lightTime(\u0394);\n const saturnPos = saturn.position(jde - \u03C4);\n r = saturnPos.range;\n const fk5 = planetposition[\"default\"].toFK5(saturnPos.lon, saturnPos.lat, jde);\n l = fk5.lon;\n b = fk5.lat;\n const [sl, cl] = base[\"default\"].sincos(l);\n const [sb, cb] = base[\"default\"].sincos(b);\n x = r * cb * cl - R * cl0;\n y = r * cb * sl - R * sl0;\n z = r * sb - R * sb0;\n \u0394 = Math.sqrt(x * x + y * y + z * z);\n };\n f();\n f();\n // Step 5.0\n \u03BB = Math.atan2(y, x);\n \u03B2 = Math.atan(z / Math.hypot(x, y));\n // First part of step 6.0\n si = Math.sin(i);\n ci = Math.cos(i);\n s\u03B2 = Math.sin(\u03B2);\n c\u03B2 = Math.cos(\u03B2);\n sB = si * c\u03B2 * Math.sin(\u03BB - \u03A9) - ci * s\u03B2;\n const B = Math.asin(sB); // return value\n // Step 7.0\n const N = 113.6655 * p + 0.8771 * p * T;\n const l\u02B9 = l - 0.01759 * p / r;\n const b\u02B9 = b - 0.000764 * p * Math.cos(l - N) / r;\n // Setup for steps 8, 9.0\n sb\u02B9 = Math.sin(b\u02B9);\n cb\u02B9 = Math.cos(b\u02B9);\n sl\u02B9\u03A9 = Math.sin(l\u02B9 - \u03A9);\n cl\u02B9\u03A9 = Math.cos(l\u02B9 - \u03A9);\n // Step 9.0\n const [s\u03BB\u03A9, c\u03BB\u03A9] = base[\"default\"].sincos(\u03BB - \u03A9);\n const U1 = Math.atan2(si * sb\u02B9 + ci * cb\u02B9 * sl\u02B9\u03A9, cb\u02B9 * cl\u02B9\u03A9);\n const U2 = Math.atan2(si * s\u03B2 + ci * c\u03B2 * s\u03BB\u03A9, c\u03B2 * c\u03BB\u03A9);\n const \u0394U = Math.abs(U1 - U2); // return value\n return [\u0394U, B]\n };\n const f2 = function () { // (B\u02B9, P, aEdge, bEdge) {\n // Remainder of step 6.0\n const aEdge = 375.35 / 3600 * p / \u0394; // return value\n const bEdge = aEdge * Math.abs(sB); // return value\n // Step 8.0\n const sB\u02B9 = si * cb\u02B9 * sl\u02B9\u03A9 - ci * sb\u02B9;\n const B\u02B9 = Math.asin(sB\u02B9); // return value\n // Step 10.0\n const [\u0394\u03C8, \u0394\u03B5] = nutation[\"default\"].nutation(jde);\n const \u03B5 = nutation[\"default\"].meanObliquity(jde) + \u0394\u03B5;\n // Step 11.0\n let \u03BB0 = \u03A9 - Math.PI / 2;\n const \u03B20 = Math.PI / 2 - i;\n // Step 12.0\n const [sl0\u03BB, cl0\u03BB] = base[\"default\"].sincos(l0 - \u03BB);\n \u03BB += 0.005693 * p * cl0\u03BB / c\u03B2;\n \u03B2 += 0.005693 * p * sl0\u03BB * s\u03B2;\n // Step 13.0\n \u03BB0 += \u0394\u03C8;\n \u03BB += \u0394\u03C8;\n // Step 14.0\n let eq = new coord[\"default\"].Ecliptic(\u03BB0, \u03B20).toEquatorial(\u03B5);\n const [\u03B10, \u03B40] = [eq.ra, eq.dec];\n eq = new coord[\"default\"].Ecliptic(\u03BB, \u03B2).toEquatorial(\u03B5);\n const [\u03B1, \u03B4] = [eq.ra, eq.dec];\n // Step 15.0\n const [s\u03B40, c\u03B40] = base[\"default\"].sincos(\u03B40);\n const [s\u03B4, c\u03B4] = base[\"default\"].sincos(\u03B4);\n const [s\u03B10\u03B1, c\u03B10\u03B1] = base[\"default\"].sincos(\u03B10 - \u03B1);\n const P = Math.atan2(c\u03B40 * s\u03B10\u03B1, s\u03B40 * c\u03B4 - c\u03B40 * s\u03B4 * c\u03B10\u03B1); // return value\n return [B\u02B9, P, aEdge, bEdge]\n };\n return [f1, f2]\n}\n\nvar saturnring = {\n ring,\n ub\n};\n\nexports[\"default\"] = saturnring;\nexports.ring = ring;\nexports.ub = ub;\n", "'use strict';\n\nObject.defineProperty(exports, '__esModule', { value: true });\n\nvar base = require('./base.cjs');\nvar nutation = require('./nutation.cjs');\nvar solar = require('./solar.cjs');\n\n/**\n * @copyright 2013 Sonia Keys\n * @copyright 2016 commenthol\n * @license MIT\n * @module solardisk\n */\n\n/**\n * Ephemeris returns the apparent orientation of the sun at the given jd.\n *\n * Results:\n * P: Position angle of the solar north pole.\n * B0: Heliographic latitude of the center of the solar disk.\n * L0: Heliographic longitude of the center of the solar disk.\n *\n * All results in radians.\n */\nfunction ephemeris (jd, earth) { // (jd float64, e *pp.V87Planet) (P, B0, L0 float64)\n const \u03B8 = (jd - 2398220) * 2 * Math.PI / 25.38;\n const I = 7.25 * Math.PI / 180;\n const K = 73.6667 * Math.PI / 180 +\n 1.3958333 * Math.PI / 180 * (jd - 2396758) / base[\"default\"].JulianCentury;\n\n const solarPos = solar[\"default\"].trueVSOP87(earth, jd);\n const L = solarPos.lon;\n const R = solarPos.range;\n const [\u0394\u03C8, \u0394\u03B5] = nutation[\"default\"].nutation(jd);\n const \u03B50 = nutation[\"default\"].meanObliquity(jd);\n const \u03B5 = \u03B50 + \u0394\u03B5;\n const \u03BB = L - 20.4898 / 3600 * Math.PI / 180 / R;\n const \u03BBp = \u03BB + \u0394\u03C8;\n\n const [s\u03BBK, c\u03BBK] = base[\"default\"].sincos(\u03BB - K);\n const [sI, cI] = base[\"default\"].sincos(I);\n\n const tx = -Math.cos(\u03BBp) * Math.tan(\u03B5);\n const ty = -c\u03BBK * Math.tan(I);\n const P = Math.atan(tx) + Math.atan(ty);\n const B0 = Math.asin(s\u03BBK * sI);\n const \u03B7 = Math.atan2(-s\u03BBK * cI, -c\u03BBK);\n const L0 = base[\"default\"].pmod(\u03B7 - \u03B8, 2 * Math.PI);\n return [P, B0, L0]\n}\n\n/**\n * Cycle returns the jd of the start of the given synodic rotation.\n *\n * Argument c is the \"Carrington\" cycle number.\n *\n * Result is a dynamical time (not UT).\n */\nfunction cycle (c) { // (c int) (jde float64)\n const jde = 2398140.227 + 27.2752316 * c;\n const m = 281.96 * Math.PI / 180 + 26.882476 * Math.PI / 180 * c;\n const [s2m, c2m] = base[\"default\"].sincos(2 * m);\n return jde + 0.1454 * Math.sin(m) - 0.0085 * s2m - 0.0141 * c2m\n}\n\nvar solardisk = {\n ephemeris,\n cycle\n};\n\nexports.cycle = cycle;\nexports[\"default\"] = solardisk;\nexports.ephemeris = ephemeris;\n", "'use strict';\n\nObject.defineProperty(exports, '__esModule', { value: true });\n\nvar base = require('./base.cjs');\nvar solar = require('./solar.cjs');\n\n/**\n * @copyright 2013 Sonia Keys\n * @copyright 2016 commenthol\n * @license MIT\n * @module solstice\n */\nconst { abs, cos, sin } = Math;\nconst D2R = Math.PI / 180;\n\n// table 27.a - for years from -1000 to +1000\nconst mc0 = [1721139.29189, 365242.13740, 0.06134, 0.00111, -0.00071];\nconst jc0 = [1721233.25401, 365241.72562, -0.05323, 0.00907, 0.00025];\nconst sc0 = [1721325.70455, 365242.49558, -0.11677, -0.00297, 0.00074];\nconst dc0 = [1721414.39987, 365242.88257, -0.00769, -0.00933, -0.00006];\n\n// table 27.b - for years from +1000 to +3000\nconst mc2 = [2451623.80984, 365242.37404, 0.05169, -0.00411, -0.00057];\nconst jc2 = [2451716.56767, 365241.62603, 0.00325, 0.00888, -0.00030];\nconst sc2 = [2451810.21715, 365242.01767, -0.11575, 0.00337, 0.00078];\nconst dc2 = [2451900.05952, 365242.74049, -0.06223, -0.00823, 0.00032];\n\n// table 27.c\nconst terms = (function () {\n const term = [\n [485, 324.96, 1934.136],\n [203, 337.23, 32964.467],\n [199, 342.08, 20.186],\n [182, 27.85, 445267.112],\n [156, 73.14, 45036.886],\n [136, 171.52, 22518.443],\n [77, 222.54, 65928.934],\n [74, 296.72, 3034.906],\n [70, 243.58, 9037.513],\n [58, 119.81, 33718.147],\n [52, 297.17, 150.678],\n [50, 21.02, 2281.226],\n [45, 247.54, 29929.562],\n [44, 325.15, 31555.956],\n [29, 60.93, 4443.417],\n [18, 155.12, 67555.328],\n [17, 288.79, 4562.452],\n [16, 198.04, 62894.029],\n [14, 199.76, 31436.921],\n [12, 95.39, 14577.848],\n [12, 287.11, 31931.756],\n [12, 320.81, 34777.259],\n [9, 227.73, 1222.114],\n [8, 15.45, 16859.074]\n ];\n return term.map((t) => {\n return {\n a: t[0],\n b: t[1],\n c: t[2]\n }\n })\n})();\n\n/**\n * March returns the JDE of the March equinox for the given year.\n *\n * Results are valid for the years -1000 to +3000.\n *\n * Accuracy is within one minute of time for the years 1951-2050.\n * @param {Number} y - (int) year\n * @returns {Number} JDE\n */\nfunction march (y) {\n if (y < 1000) {\n return eq(y, mc0)\n }\n return eq(y - 2000, mc2)\n}\n\n/**\n * June returns the JDE of the June solstice for the given year.\n *\n * Results are valid for the years -1000 to +3000.\n *\n * Accuracy is within one minute of time for the years 1951-2050.\n * @param {Number} y - (int) year\n * @returns {Number} JDE\n */\nfunction june (y) {\n if (y < 1000) {\n return eq(y, jc0)\n }\n return eq(y - 2000, jc2)\n}\n\n/**\n * September returns the JDE of the September equinox for the given year.\n *\n * Results are valid for the years -1000 to +3000.\n *\n * Accuracy is within one minute of time for the years 1951-2050.\n * @param {Number} y - (int) year\n * @returns {Number} JDE\n */\nfunction september (y) {\n if (y < 1000) {\n return eq(y, sc0)\n }\n return eq(y - 2000, sc2)\n}\n\n/**\n * December returns the JDE of the December solstice for a given year.\n *\n * Results are valid for the years -1000 to +3000.\n *\n * Accuracy is within one minute of time for the years 1951-2050.\n * @param {Number} y - (int) year\n * @returns {Number} JDE\n */\nfunction december (y) {\n if (y < 1000) {\n return eq(y, dc0)\n }\n return eq(y - 2000, dc2)\n}\n\n/**\n * Fast calculation of solstices/ equinoxes\n * Accuracy is within one minute of time for the years 1951-2050.\n *\n * @param {Number} y - (int) year\n * @param {Array} c - term from table 27.a / 27.b\n * @returns {Number} JDE\n */\nfunction eq (y, c) {\n const J0 = base[\"default\"].horner(y * 0.001, c);\n const T = base[\"default\"].J2000Century(J0);\n const W = 35999.373 * D2R * T - 2.47 * D2R;\n const \u0394\u03BB = 1 + 0.0334 * cos(W) + 0.0007 * cos(2 * W);\n let S = 0;\n for (let i = terms.length - 1; i >= 0; i--) {\n const t = terms[i];\n S += t.a * cos((t.b + t.c * T) * D2R);\n }\n return J0 + 0.00001 * S / \u0394\u03BB\n}\n\n/**\n * March2 returns a more accurate JDE of the March equinox.\n *\n * Result is accurate to one second of time.\n *\n * @param {Number} year - (int) year\n * @param {planetposition.Planet} planet - must be a V87Planet object representing Earth, obtained with\n * the package planetposition\n * @returns {Number} JDE\n */\nfunction march2 (year, planet) {\n return longitude(year, planet, 0)\n}\n\n/**\n * June2 returns a more accurate JDE of the June solstice.\n *\n * Result is accurate to one second of time.\n *\n * @param {Number} year - (int) year\n * @param {planetposition.Planet} planet - must be a V87Planet object representing Earth, obtained with\n * the package planetposition\n * @returns {Number} JDE\n */\nfunction june2 (year, planet) {\n return longitude(year, planet, Math.PI / 2)\n}\n\n/**\n * September2 returns a more accurate JDE of the September equinox.\n *\n * Result is accurate to one second of time.\n *\n * @param {Number} year - (int) year\n * @param {planetposition.Planet} planet - must be a V87Planet object representing Earth, obtained with\n * the package planetposition\n * @returns {Number} JDE\n */\nfunction september2 (year, planet) {\n return longitude(year, planet, Math.PI)\n}\n\n/**\n * December2 returns a more accurate JDE of the December solstice.\n *\n * Result is accurate to one second of time.\n *\n * @param {Number} year - (int) year\n * @param {planetposition.Planet} planet - must be a V87Planet object representing Earth, obtained with\n * the package planetposition\n * @returns {Number} JDE\n */\nfunction december2 (year, planet) {\n return longitude(year, planet, Math.PI * 3 / 2)\n}\n\n/**\n * Longitude returns the JDE for a given `year`, VSOP87 Planet `planet` at a\n * given geocentric solar longitude `lon`\n * @param {Number} year - (int)\n * @param {planetposition.Planet} planet\n * @param {Number} lon - geocentric solar longitude in radians\n * @returns {Number} JDE\n */\nfunction longitude (year, planet, lon) {\n let c;\n let ct;\n\n if (year < 1000) {\n ct = [mc0, jc0, sc0, dc0];\n } else {\n ct = [mc2, jc2, sc2, dc2];\n year -= 2000;\n }\n\n lon = lon % (Math.PI * 2);\n\n if (lon < Math.PI / 2) {\n c = ct[0];\n } else if (lon < Math.PI) {\n c = ct[1];\n } else if (lon < Math.PI * 3 / 2) {\n c = ct[2];\n } else {\n c = ct[3];\n }\n\n return eq2(year, planet, lon, c)\n}\n\n/**\n * Accurate calculation of solstices/ equinoxes\n * Result is accurate to one second of time.\n *\n * @param {Number} year - (int) year\n * @param {planetposition.Planet} planet - vsop87 planet\n * @param {Number} lon - longitude in radians\n * @param {Array} c - term from table 27.a / 27.b\n * @returns {Number} JDE\n */\nfunction eq2 (year, planet, lon, c) {\n let J0 = base[\"default\"].horner(year * 0.001, c);\n\n for (;;) {\n const a = solar[\"default\"].apparentVSOP87(planet, J0);\n const c = 58 * sin(lon - a.lon); // (27.1) p. 180\n J0 += c;\n if (abs(c) < 0.000005) {\n break\n }\n }\n\n return J0\n}\n\nvar solstice = {\n march,\n june,\n september,\n december,\n march2,\n june2,\n september2,\n december2,\n longitude\n};\n\nexports.december = december;\nexports.december2 = december2;\nexports[\"default\"] = solstice;\nexports.june = june;\nexports.june2 = june2;\nexports.longitude = longitude;\nexports.march = march;\nexports.march2 = march2;\nexports.september = september;\nexports.september2 = september2;\n", "'use strict';\n\nObject.defineProperty(exports, '__esModule', { value: true });\n\n/**\n * @copyright 2013 Sonia Keys\n * @copyright 2016 commenthol\n * @license MIT\n * @module stellar\n */\n/**\n * Stellar: Chapter 56, Stellar Magnitudes.\n */\n\n/**\n * Sum returns the combined apparent magnitude of two stars.\n */\nfunction sum (m1, m2) { // (m1, m2 float64) float64\n const x = 0.4 * (m2 - m1);\n return m2 - 2.5 * Math.log10(Math.pow(10, x) + 1)\n}\n\n/**\n * SumN returns the combined apparent magnitude of a number of stars.\n */\nfunction sumN (m) { // (m ...float64) float64\n let s = 0;\n for (const mi of m) {\n s += Math.pow(10, -0.4 * mi);\n }\n return -2.5 * Math.log10(s)\n}\n\n/**\n * Ratio returns the brightness ratio of two stars.\n *\n * Arguments m1, m2 are apparent magnitudes.\n */\nfunction ratio (m1, m2) { // (m1, m2 float64) float64\n const x = 0.4 * (m2 - m1);\n return Math.pow(10, x)\n}\n\n/**\n * Difference returns the difference in apparent magnitude of two stars\n * given their brightness ratio.\n */\nfunction difference (ratio) { // (ratio float64) float64\n return 2.5 * Math.log10(ratio)\n}\n\n/**\n * AbsoluteByParallax returns absolute magnitude given annual parallax.\n *\n * Argument m is apparent magnitude, \u03C0 is annual parallax in arc seconds.\n */\nfunction absoluteByParallax (m, \u03C0) { // (m, \u03C0 float64) float64\n return m + 5 + 5 * Math.log10(\u03C0)\n}\n\n/**\n * AbsoluteByDistance returns absolute magnitude given distance.\n *\n * Argument m is apparent magnitude, d is distance in parsecs.\n */\nfunction absoluteByDistance (m, d) { // (m, d float64) float64\n return m + 5 - 5 * Math.log10(d)\n}\n\nvar stellar = {\n sum,\n sumN,\n ratio,\n difference,\n absoluteByParallax,\n absoluteByDistance\n};\n\nexports.absoluteByDistance = absoluteByDistance;\nexports.absoluteByParallax = absoluteByParallax;\nexports[\"default\"] = stellar;\nexports.difference = difference;\nexports.ratio = ratio;\nexports.sum = sum;\nexports.sumN = sumN;\n", "'use strict';\n\nObject.defineProperty(exports, '__esModule', { value: true });\n\nvar base = require('./base.cjs');\n\n/**\n * @copyright 2013 Sonia Keys\n * @copyright 2016 commenthol\n * @license MIT\n * @module sundial\n */\n\n/**\n * Point return type represents a point to be used in constructing the sundial.\n */\nfunction Point (x, y) {\n this.x = x || 0;\n this.y = y || 0;\n}\n\n/**\n * Line holds data to draw an hour line on the sundial.\n */\nfunction Line (hour, points) {\n this.hour = hour; // 0 to 24\n this.points = points || []; // One or more points corresponding to the hour.\n}\n\nconst m = [-23.44, -20.15, -11.47, 0, 11.47, 20.15, 23.44];\n\n/**\n * General computes data for the general case of a planar sundial.\n *\n * Argument \u03C6 is geographic latitude at which the sundial will be located.\n * D is gnomonic declination, the azimuth of the perpendicular to the plane\n * of the sundial, measured from the southern meridian towards the west.\n * Argument a is the length of a straight stylus perpendicular to the plane\n * of the sundial, z is zenithal distance of the direction defined by the\n * stylus. Angles \u03C6, D, and z are in radians. Units of stylus length a\n * are arbitrary.\n *\n * Results consist of a set of lines, a center point, u, the length of a\n * polar stylus, and \u03C8, the angle which the polar stylus makes with the plane\n * of the sundial. The center point, the points defining the hour lines, and\n * u are in units of a, the stylus length. \u03C8 is in radians.\n */\nfunction general (\u03C6, D, a, z) { // (\u03C6, D, a, z float64) (lines []Line, center Point, u, \u03C8 float64)\n const [s\u03C6, c\u03C6] = base[\"default\"].sincos(\u03C6);\n const t\u03C6 = s\u03C6 / c\u03C6;\n const [sD, cD] = base[\"default\"].sincos(D);\n const [sz, cz] = base[\"default\"].sincos(z);\n const P = s\u03C6 * cz - c\u03C6 * sz * cD;\n const lines = [];\n for (let i = 0; i < 24; i++) {\n const l = new Line(i);\n const H = (i - 12) * 15 * Math.PI / 180;\n const aH = Math.abs(H);\n const [sH, cH] = base[\"default\"].sincos(H);\n for (const d of m) {\n const t\u03B4 = Math.tan(d * Math.PI / 180);\n const H0 = Math.acos(-t\u03C6 * t\u03B4);\n if (aH > H0) {\n continue // sun below horizon\n }\n const Q = sD * sz * sH + (c\u03C6 * cz + s\u03C6 * sz * cD) * cH + P * t\u03B4;\n if (Q < 0) {\n continue // sun below plane of sundial\n }\n const Nx = cD * sH - sD * (s\u03C6 * cH - c\u03C6 * t\u03B4);\n const Ny = cz * sD * sH - (c\u03C6 * sz - s\u03C6 * cz * cD) * cH - (s\u03C6 * sz + c\u03C6 * cz * cD) * t\u03B4;\n l.points.push(new Point(a * Nx / Q, a * Ny / Q));\n }\n if (l.points.length > 0) {\n lines.push(l);\n }\n }\n const center = new Point();\n center.x = a / P * c\u03C6 * sD;\n center.y = -a / P * (s\u03C6 * sz + c\u03C6 * cz * cD);\n const aP = Math.abs(P);\n const u = a / aP;\n const \u03C8 = Math.asin(aP);\n return {\n lines,\n center,\n length: u,\n angle: \u03C8\n }\n}\n\n/**\n * Equatorial computes data for a sundial level with the equator.\n *\n * Argument \u03C6 is geographic latitude at which the sundial will be located;\n * a is the length of a straight stylus perpendicular to the plane of the\n * sundial.\n *\n * The sundial will have two sides, north and south. Results n and s define\n * lines on the north and south sides of the sundial. Result coordinates\n * are in units of a, the stylus length.\n */\nfunction equatorial (\u03C6, a) { // (\u03C6, a float64) (n, s []Line)\n const t\u03C6 = Math.tan(\u03C6);\n const n = [];\n const s = [];\n for (let i = 0; i < 24; i++) {\n const nl = new Line(i);\n const sl = new Line(i);\n const H = (i - 12) * 15 * Math.PI / 180;\n const aH = Math.abs(H);\n const [sH, cH] = base[\"default\"].sincos(H);\n for (const d of m) {\n const t\u03B4 = Math.tan(d * Math.PI / 180);\n const H0 = Math.acos(-t\u03C6 * t\u03B4);\n if (aH > H0) {\n continue\n }\n const x = -a * sH / t\u03B4;\n const yy = a * cH / t\u03B4;\n if (t\u03B4 < 0) {\n sl.points.push(new Point(x, yy));\n } else {\n nl.points.push(new Point(x, -yy));\n }\n }\n if (nl.points.length > 0) {\n n.push(nl);\n }\n if (sl.points.length > 0) {\n s.push(sl);\n }\n }\n return {\n north: n,\n south: s\n }\n}\n\n/**\n * Horizontal computes data for a horizontal sundial.\n *\n * Argument \u03C6 is geographic latitude at which the sundial will be located,\n * a is the length of a straight stylus perpendicular to the plane of the\n * sundial.\n *\n * Results consist of a set of lines, a center point, and u, the length of a\n * polar stylus. They are in units of a, the stylus length.\n */\nfunction horizontal (\u03C6, a) { // (\u03C6, a float64) (lines []Line, center Point, u float64)\n const [s\u03C6, c\u03C6] = base[\"default\"].sincos(\u03C6);\n const t\u03C6 = s\u03C6 / c\u03C6;\n const lines = [];\n for (let i = 0; i < 24; i++) {\n const l = new Line(i);\n const H = (i - 12) * 15 * Math.PI / 180;\n const aH = Math.abs(H);\n const [sH, cH] = base[\"default\"].sincos(H);\n for (const d of m) {\n const t\u03B4 = Math.tan(d * Math.PI / 180);\n const H0 = Math.acos(-t\u03C6 * t\u03B4);\n if (aH > H0) {\n continue // sun below horizon\n }\n const Q = c\u03C6 * cH + s\u03C6 * t\u03B4;\n const x = a * sH / Q;\n const y = a * (s\u03C6 * cH - c\u03C6 * t\u03B4) / Q;\n l.points.push(new Point(x, y));\n }\n if (l.points.length > 0) {\n lines.push(l);\n }\n }\n const center = new Point(0, -a / t\u03C6);\n const u = a / Math.abs(s\u03C6);\n return {\n lines,\n center,\n length: u\n }\n}\n\n/**\n * Vertical computes data for a vertical sundial.\n *\n * Argument \u03C6 is geographic latitude at which the sundial will be located.\n * D is gnomonic declination, the azimuth of the perpendicular to the plane\n * of the sundial, measured from the southern meridian towards the west.\n * Argument a is the length of a straight stylus perpendicular to the plane\n * of the sundial.\n *\n * Results consist of a set of lines, a center point, and u, the length of a\n * polar stylus. They are in units of a, the stylus length.\n */\nfunction vertical (\u03C6, D, a) { // (\u03C6, D, a float64) (lines []Line, center Point, u float64)\n const [s\u03C6, c\u03C6] = base[\"default\"].sincos(\u03C6);\n const t\u03C6 = s\u03C6 / c\u03C6;\n const [sD, cD] = base[\"default\"].sincos(D);\n const lines = [];\n for (let i = 0; i < 24; i++) {\n const l = new Line(i);\n const H = (i - 12) * 15 * Math.PI / 180;\n const aH = Math.abs(H);\n const [sH, cH] = base[\"default\"].sincos(H);\n for (const d of m) {\n const t\u03B4 = Math.tan(d * Math.PI / 180);\n const H0 = Math.acos(-t\u03C6 * t\u03B4);\n if (aH > H0) {\n continue // sun below horizon\n }\n const Q = sD * sH + s\u03C6 * cD * cH - c\u03C6 * cD * t\u03B4;\n if (Q < 0) {\n continue // sun below plane of sundial\n }\n const x = a * (cD * sH - s\u03C6 * sD * cH + c\u03C6 * sD * t\u03B4) / Q;\n const y = -a * (c\u03C6 * cH + s\u03C6 * t\u03B4) / Q;\n l.points.push(new Point(x, y));\n }\n if (l.points.length > 0) {\n lines.push(l);\n }\n }\n const center = new Point();\n center.x = -a * sD / cD;\n center.y = a * t\u03C6 / cD;\n const u = a / Math.abs(c\u03C6 * cD);\n return {\n lines,\n center,\n length: u\n }\n}\n\nvar sundial = {\n general,\n equatorial,\n horizontal,\n vertical\n};\n\nexports[\"default\"] = sundial;\nexports.equatorial = equatorial;\nexports.general = general;\nexports.horizontal = horizontal;\nexports.vertical = vertical;\n", "'use strict';\n\nObject.defineProperty(exports, '__esModule', { value: true });\n\nvar base = require('./base.cjs');\nvar eqtime = require('./eqtime.cjs');\nvar sexagesimal = require('./sexagesimal.cjs');\nvar solar = require('./solar.cjs');\nvar julian = require('./julian.cjs');\nvar rise = require('./rise.cjs');\n\n/**\n * @copyright 2016 commenthol\n * @license MIT\n * @module sunrise\n */\n\nconst stdh0 = {\n sunrise: new sexagesimal[\"default\"].Angle(true, 0, 50, 0).rad(),\n sunriseEnd: new sexagesimal[\"default\"].Angle(true, 0, 18, 0).rad(),\n twilight: new sexagesimal[\"default\"].Angle(true, 6, 0, 0).rad(),\n nauticalTwilight: new sexagesimal[\"default\"].Angle(true, 12, 0, 0).rad(),\n night: new sexagesimal[\"default\"].Angle(true, 18, 0, 0).rad(),\n goldenHour: new sexagesimal[\"default\"].Angle(false, 6, 0, 0).rad()\n};\n\nconst stdh0Sunrise = (refraction) => rise[\"default\"].refraction(stdh0.sunrise, refraction);\nconst stdh0SunriseEnd = (refraction) => rise[\"default\"].refraction(stdh0.sunriseEnd, refraction);\nconst stdh0Twilight = (refraction) => rise[\"default\"].refraction(stdh0.twilight, refraction);\nconst stdh0NauticalTwilight = (refraction) => rise[\"default\"].refraction(stdh0.nauticalTwilight, refraction);\nconst stdh0Night = (refraction) => rise[\"default\"].refraction(stdh0.night, refraction);\nconst stdh0GoldenHour = (refraction) => rise[\"default\"].refraction(stdh0.goldenHour, refraction);\n\nclass Sunrise {\n /**\n * Computes time of sunrise, sunset for a given day `date` of an observer on earth given by latitude and longitude.\n * Methods may return `undefined` instead of `julian.Calendar` for latitudes very near the poles.\n * @param {julian.Calendar} date - calendar date\n * @param {number} lat - latitude of observer in the range of (-89.6, 89.6)\n * @param {number} lon - longitude of observer (measured positively westwards, New York = 40.7\u00B0 lat, 74\u00B0 lon)\n * @param {number} [refraction] - optional refraction\n */\n constructor (date, lat, lon, refraction) {\n this.date = date;\n this.jde = date.midnight().toJDE();\n this.lat = sexagesimal[\"default\"].angleFromDeg(lat);\n this.lon = sexagesimal[\"default\"].angleFromDeg(lon);\n this.refraction = refraction;\n }\n\n _calcNoon (jde) {\n const etime = sexagesimal[\"default\"].secFromHourAngle(eqtime[\"default\"].eSmart(jde));\n const delta = sexagesimal[\"default\"].secFromHourAngle(this.lon);\n const time = 43200 /* noon */ + delta - etime; // in seconds\n return base[\"default\"].pmod(time / 86400, 86400)\n }\n\n _calcRiseOrSet (jde, h0, isSet) {\n const etime = sexagesimal[\"default\"].secFromHourAngle(eqtime[\"default\"].eSmart(jde));\n const solarDec = solar[\"default\"].apparentEquatorial(jde).dec;\n let ha = rise[\"default\"].hourAngle(this.lat, h0, solarDec);\n if (isSet) ha = -ha;\n const delta = sexagesimal[\"default\"].secFromHourAngle(ha - this.lon);\n const time = 43200 /* noon */ - delta - etime; // in seconds\n return time / 86400\n }\n\n _calcPolarDayNight (h0, isSet, step) {\n let jde = this.jde;\n let t;\n let failCnt = 0;\n while (failCnt < 190) { // a bit more than days of half a year\n jde += step;\n try {\n t = this._calcRiseOrSet(jde, h0, isSet);\n t = this._calcRiseOrSet(jde + t, h0, isSet);\n break\n } catch (e) {\n t = undefined;\n failCnt++;\n }\n }\n if (t === undefined) {\n return\n }\n return new julian[\"default\"].Calendar().fromJDE(jde + t)\n }\n\n _calc (h0, isSet) {\n let t;\n const jde = this.jde;\n // calc 2times for higher accuracy\n try {\n t = this._calcRiseOrSet(jde, h0, isSet);\n t = this._calcRiseOrSet(jde + t, h0, isSet);\n return new julian[\"default\"].Calendar().fromJDE(jde + t)\n } catch (e) {\n let step = (isSet ? -1 : 1);\n const doy = this.date.dayOfYear();\n if ( // overlap with march, september equinoxes\n (this.lat > 0 && (doy > 76 && doy < 267)) || // northern hemisphere\n (this.lat < 0 && (doy < 83 || doy > 262)) // southern hemisphere\n ) {\n step = -step;\n }\n return this._calcPolarDayNight(h0, isSet, step)\n }\n }\n\n /**\n * time of solar transit\n * @return {julian.Calendar} time of noon\n */\n noon () {\n const jde = this.jde;\n // calc 2times for higher accuracy\n let t = this._calcNoon(jde + this.lon / (2 * Math.PI));\n t = this._calcNoon(jde + t);\n return new julian[\"default\"].Calendar().fromJDE(jde + t)\n }\n\n /**\n * Solar limb appears over the easter horizon in the morning\n * @return {julian.Calendar} time of sunrise\n */\n rise () {\n return this._calc(stdh0Sunrise(this.refraction), false)\n }\n\n /**\n * @return {julian.Calendar} time of sunset\n * Solar limb disappears on the western horizon in the evening\n */\n set () {\n return this._calc(stdh0Sunrise(this.refraction), true)\n }\n\n /**\n * Solar limb is fully visible at the easter horizon\n * @return {julian.Calendar} time of sunrise end\n */\n riseEnd () {\n return this._calc(stdh0SunriseEnd(this.refraction), false)\n }\n\n /**\n * Solar limb starts disappearing on the western horizon in the evening\n * @return {julian.Calendar} time of sunset start\n */\n setStart () {\n return this._calc(stdh0SunriseEnd(this.refraction), true)\n }\n\n /**\n * Dawn, there is still enough light for objects to be distinguishable,\n * @return {julian.Calendar} time of dawn\n */\n dawn () {\n return this._calc(stdh0Twilight(this.refraction), false)\n }\n\n /**\n * Dusk, there is still enough light for objects to be distinguishable\n * Bright stars and planets are visible by naked eye\n * @return {julian.Calendar} time of dusk\n */\n dusk () {\n return this._calc(stdh0Twilight(this.refraction), true)\n }\n\n /**\n * nautical dawn - Horizon gets visible by naked eye\n * @return {julian.Calendar} time of nautical dawn\n */\n nauticalDawn () {\n return this._calc(stdh0NauticalTwilight(this.refraction), false)\n }\n\n /**\n * nautical dusk - Horizon is no longer visible by naked eye\n * @return {julian.Calendar} time of nautical dusk\n */\n nauticalDusk () {\n return this._calc(stdh0NauticalTwilight(this.refraction), true)\n }\n\n /**\n * night starts - No sunlight illumination of the sky, such no intereferance\n * with astronomical observations.\n * @return {julian.Calendar} time of start of night\n */\n nightStart () {\n return this._calc(stdh0Night(this.refraction), true)\n }\n\n /**\n * night end - Sunlight starts illumination of the sky and interferes\n * with astronomical observations.\n * @return {julian.Calendar} time of end of night\n */\n nightEnd () {\n return this._calc(stdh0Night(this.refraction), false)\n }\n\n /**\n * Start of \"golden hour\" before sunset\n * @return {julian.Calendar} time of start of golden hour\n */\n goldenHourStart () {\n return this._calc(stdh0GoldenHour(this.refraction), true)\n }\n\n /**\n * End of \"golden hour\" after sunrise\n * @return {julian.Calendar} time of end of golden hour\n */\n goldenHourEnd () {\n return this._calc(stdh0GoldenHour(this.refraction), false)\n }\n}\n\nvar sunrise = {\n Sunrise\n};\n\nexports.Sunrise = Sunrise;\nexports[\"default\"] = sunrise;\n", "'use strict';\n\nObject.defineProperty(exports, '__esModule', { value: true });\n\nvar angle = require('./angle.cjs');\nvar apparent = require('./apparent.cjs');\nvar apsis = require('./apsis.cjs');\nvar base = require('./base.cjs');\nvar binary = require('./binary.cjs');\nvar coord = require('./coord.cjs');\nvar conjunction = require('./conjunction.cjs');\nvar circle = require('./circle.cjs');\nvar deltat = require('./deltat.cjs');\nvar elementequinox = require('./elementequinox.cjs');\nvar elliptic = require('./elliptic.cjs');\nvar eclipse = require('./eclipse.cjs');\nvar elp = require('./elp.cjs');\nvar eqtime = require('./eqtime.cjs');\nvar fit = require('./fit.cjs');\nvar globe = require('./globe.cjs');\nvar illum = require('./illum.cjs');\nvar interpolation = require('./interpolation.cjs');\nvar iterate = require('./iterate.cjs');\nvar jm = require('./jm.cjs');\nvar julian = require('./julian.cjs');\nvar jupiter = require('./jupiter.cjs');\nvar jupitermoons = require('./jupitermoons.cjs');\nvar kepler = require('./kepler.cjs');\nvar line = require('./line.cjs');\nvar nearparabolic = require('./nearparabolic.cjs');\nvar node = require('./node.cjs');\nvar nutation = require('./nutation.cjs');\nvar mars = require('./mars.cjs');\nvar moon = require('./moon.cjs');\nvar moonillum = require('./moonillum.cjs');\nvar moonmaxdec = require('./moonmaxdec.cjs');\nvar moonnode = require('./moonnode.cjs');\nvar moonphase = require('./moonphase.cjs');\nvar moonposition = require('./moonposition.cjs');\nvar parabolic = require('./parabolic.cjs');\nvar parallax = require('./parallax.cjs');\nvar parallactic = require('./parallactic.cjs');\nvar perihelion = require('./perihelion.cjs');\nvar planetary = require('./planetary.cjs');\nvar planetposition = require('./planetposition.cjs');\nvar planetelements = require('./planetelements.cjs');\nvar pluto = require('./pluto.cjs');\nvar precess = require('./precess.cjs');\nvar refraction = require('./refraction.cjs');\nvar rise = require('./rise.cjs');\nvar saturnmoons = require('./saturnmoons.cjs');\nvar saturnring = require('./saturnring.cjs');\nvar sexagesimal = require('./sexagesimal.cjs');\nvar sidereal = require('./sidereal.cjs');\nvar solar = require('./solar.cjs');\nvar solardisk = require('./solardisk.cjs');\nvar solarxyz = require('./solarxyz.cjs');\nvar solstice = require('./solstice.cjs');\nvar stellar = require('./stellar.cjs');\nvar sundial = require('./sundial.cjs');\nvar sunrise = require('./sunrise.cjs');\n\n\n\nexports.angle = angle[\"default\"];\nexports.apparent = apparent[\"default\"];\nexports.apsis = apsis[\"default\"];\nexports.base = base[\"default\"];\nexports.binary = binary[\"default\"];\nexports.coord = coord[\"default\"];\nexports.conjunction = conjunction[\"default\"];\nexports.circle = circle[\"default\"];\nexports.deltat = deltat[\"default\"];\nexports.elementequinox = elementequinox[\"default\"];\nexports.elliptic = elliptic[\"default\"];\nexports.eclipse = eclipse[\"default\"];\nexports.elp = elp[\"default\"];\nexports.eqtime = eqtime[\"default\"];\nexports.fit = fit[\"default\"];\nexports.globe = globe[\"default\"];\nexports.illum = illum[\"default\"];\nexports.interpolation = interpolation[\"default\"];\nexports.iterate = iterate[\"default\"];\nexports.jm = jm[\"default\"];\nexports.julian = julian[\"default\"];\nexports.jupiter = jupiter[\"default\"];\nexports.jupitermoons = jupitermoons[\"default\"];\nexports.kepler = kepler[\"default\"];\nexports.line = line[\"default\"];\nexports.nearparabolic = nearparabolic[\"default\"];\nexports.node = node[\"default\"];\nexports.nutation = nutation[\"default\"];\nexports.mars = mars[\"default\"];\nexports.moon = moon[\"default\"];\nexports.moonillum = moonillum[\"default\"];\nexports.moonmaxdec = moonmaxdec[\"default\"];\nexports.moonnode = moonnode[\"default\"];\nexports.moonphase = moonphase[\"default\"];\nexports.moonposition = moonposition[\"default\"];\nexports.parabolic = parabolic[\"default\"];\nexports.parallax = parallax[\"default\"];\nexports.parallactic = parallactic[\"default\"];\nexports.perihelion = perihelion[\"default\"];\nexports.planetary = planetary[\"default\"];\nexports.planetposition = planetposition[\"default\"];\nexports.planetelements = planetelements[\"default\"];\nexports.pluto = pluto[\"default\"];\nexports.precess = precess[\"default\"];\nexports.refraction = refraction[\"default\"];\nexports.rise = rise[\"default\"];\nexports.saturnmoons = saturnmoons[\"default\"];\nexports.saturnring = saturnring[\"default\"];\nexports.sexagesimal = sexagesimal[\"default\"];\nexports.sidereal = sidereal[\"default\"];\nexports.solar = solar[\"default\"];\nexports.solardisk = solardisk[\"default\"];\nexports.solarxyz = solarxyz[\"default\"];\nexports.solstice = solstice[\"default\"];\nexports.stellar = stellar[\"default\"];\nexports.sundial = sundial[\"default\"];\nexports.sunrise = sunrise[\"default\"];\n", "'use strict';\n\nvar astronomia = require('astronomia');\nvar CalDate = require('caldate');\nvar CalEvent = require('./CalEvent.cjs');\n\nfunction _interopDefaultLegacy (e) { return e && typeof e === 'object' && 'default' in e ? e : { 'default': e }; }\n\nvar CalDate__default = /*#__PURE__*/_interopDefaultLegacy(CalDate);\n\nclass Julian extends CalEvent {\n inYear (year) {\n if (this.opts.year && this.opts.year !== year) {\n return this\n }\n const cal = new astronomia.julian.CalendarJulian(year, this.opts.month, this.opts.day).toGregorian();\n const d = (new CalDate__default[\"default\"](cal)).setOffset(this.offset);\n this.dates.push(d);\n return this\n }\n}\n\nmodule.exports = Julian;\n", "/*\n Expose functions.\n*/\nmodule.exports =\n { toJalaali: toJalaali\n , toGregorian: toGregorian\n , isValidJalaaliDate: isValidJalaaliDate\n , isLeapJalaaliYear: isLeapJalaaliYear\n , jalaaliMonthLength: jalaaliMonthLength\n , jalCal: jalCal\n , j2d: j2d\n , d2j: d2j\n , g2d: g2d\n , d2g: d2g\n , jalaaliToDateObject: jalaaliToDateObject\n , jalaaliWeek: jalaaliWeek\n }\n\n/*\n Jalaali years starting the 33-year rule.\n*/\nvar breaks = [ -61, 9, 38, 199, 426, 686, 756, 818, 1111, 1181, 1210\n , 1635, 2060, 2097, 2192, 2262, 2324, 2394, 2456, 3178\n ]\n\n/*\n Converts a Gregorian date to Jalaali.\n*/\nfunction toJalaali(gy, gm, gd) {\n if (Object.prototype.toString.call(gy) === '[object Date]') {\n gd = gy.getDate()\n gm = gy.getMonth() + 1\n gy = gy.getFullYear()\n }\n return d2j(g2d(gy, gm, gd))\n}\n\n/*\n Converts a Jalaali date to Gregorian.\n*/\nfunction toGregorian(jy, jm, jd) {\n return d2g(j2d(jy, jm, jd))\n}\n\n/*\n Checks whether a Jalaali date is valid or not.\n*/\nfunction isValidJalaaliDate(jy, jm, jd) {\n return jy >= -61 && jy <= 3177 &&\n jm >= 1 && jm <= 12 &&\n jd >= 1 && jd <= jalaaliMonthLength(jy, jm)\n}\n\n/*\n Is this a leap year or not?\n*/\nfunction isLeapJalaaliYear(jy) {\n return jalCalLeap(jy) === 0\n}\n\n/*\n Number of days in a given month in a Jalaali year.\n*/\nfunction jalaaliMonthLength(jy, jm) {\n if (jm <= 6) return 31\n if (jm <= 11) return 30\n if (isLeapJalaaliYear(jy)) return 30\n return 29\n}\n\n/*\n This function determines if the Jalaali (Persian) year is\n leap (366-day long) or is the common year (365 days)\n\n @param jy Jalaali calendar year (-61 to 3177)\n @returns number of years since the last leap year (0 to 4)\n */\nfunction jalCalLeap(jy) {\n var bl = breaks.length\n , jp = breaks[0]\n , jm\n , jump\n , leap\n , n\n , i\n\n if (jy < jp || jy >= breaks[bl - 1])\n throw new Error('Invalid Jalaali year ' + jy)\n\n for (i = 1; i < bl; i += 1) {\n jm = breaks[i]\n jump = jm - jp\n if (jy < jm)\n break\n jp = jm\n }\n n = jy - jp\n\n if (jump - n < 6)\n n = n - jump + div(jump + 4, 33) * 33\n leap = mod(mod(n + 1, 33) - 1, 4)\n if (leap === -1) {\n leap = 4\n }\n\n return leap\n}\n\n/*\n This function determines if the Jalaali (Persian) year is\n leap (366-day long) or is the common year (365 days), and\n finds the day in March (Gregorian calendar) of the first\n day of the Jalaali year (jy).\n\n @param jy Jalaali calendar year (-61 to 3177)\n @param withoutLeap when don't need leap (true or false) default is false\n @return\n leap: number of years since the last leap year (0 to 4)\n gy: Gregorian year of the beginning of Jalaali year\n march: the March day of Farvardin the 1st (1st day of jy)\n @see: http://www.astro.uni.torun.pl/~kb/Papers/EMP/PersianC-EMP.htm\n @see: http://www.fourmilab.ch/documents/calendar/\n*/\nfunction jalCal(jy, withoutLeap) {\n var bl = breaks.length\n , gy = jy + 621\n , leapJ = -14\n , jp = breaks[0]\n , jm\n , jump\n , leap\n , leapG\n , march\n , n\n , i\n\n if (jy < jp || jy >= breaks[bl - 1])\n throw new Error('Invalid Jalaali year ' + jy)\n\n // Find the limiting years for the Jalaali year jy.\n for (i = 1; i < bl; i += 1) {\n jm = breaks[i]\n jump = jm - jp\n if (jy < jm)\n break\n leapJ = leapJ + div(jump, 33) * 8 + div(mod(jump, 33), 4)\n jp = jm\n }\n n = jy - jp\n\n // Find the number of leap years from AD 621 to the beginning\n // of the current Jalaali year in the Persian calendar.\n leapJ = leapJ + div(n, 33) * 8 + div(mod(n, 33) + 3, 4)\n if (mod(jump, 33) === 4 && jump - n === 4)\n leapJ += 1\n\n // And the same in the Gregorian calendar (until the year gy).\n leapG = div(gy, 4) - div((div(gy, 100) + 1) * 3, 4) - 150\n\n // Determine the Gregorian date of Farvardin the 1st.\n march = 20 + leapJ - leapG\n\n // return with gy and march when we don't need leap\n if (withoutLeap) return { gy: gy, march: march };\n\n\n // Find how many years have passed since the last leap year.\n if (jump - n < 6)\n n = n - jump + div(jump + 4, 33) * 33\n leap = mod(mod(n + 1, 33) - 1, 4)\n if (leap === -1) {\n leap = 4\n }\n\n return { leap: leap\n , gy: gy\n , march: march\n }\n}\n\n/*\n Converts a date of the Jalaali calendar to the Julian Day number.\n\n @param jy Jalaali year (1 to 3100)\n @param jm Jalaali month (1 to 12)\n @param jd Jalaali day (1 to 29/31)\n @return Julian Day number\n*/\nfunction j2d(jy, jm, jd) {\n var r = jalCal(jy, true)\n return g2d(r.gy, 3, r.march) + (jm - 1) * 31 - div(jm, 7) * (jm - 7) + jd - 1\n}\n\n/*\n Converts the Julian Day number to a date in the Jalaali calendar.\n\n @param jdn Julian Day number\n @return\n jy: Jalaali year (1 to 3100)\n jm: Jalaali month (1 to 12)\n jd: Jalaali day (1 to 29/31)\n*/\nfunction d2j(jdn) {\n var gy = d2g(jdn).gy // Calculate Gregorian year (gy).\n , jy = gy - 621\n , r = jalCal(jy, false)\n , jdn1f = g2d(gy, 3, r.march)\n , jd\n , jm\n , k\n\n // Find number of days that passed since 1 Farvardin.\n k = jdn - jdn1f\n if (k >= 0) {\n if (k <= 185) {\n // The first 6 months.\n jm = 1 + div(k, 31)\n jd = mod(k, 31) + 1\n return { jy: jy\n , jm: jm\n , jd: jd\n }\n } else {\n // The remaining months.\n k -= 186\n }\n } else {\n // Previous Jalaali year.\n jy -= 1\n k += 179\n if (r.leap === 1)\n k += 1\n }\n jm = 7 + div(k, 30)\n jd = mod(k, 30) + 1\n return { jy: jy\n , jm: jm\n , jd: jd\n }\n}\n\n/*\n Calculates the Julian Day number from Gregorian or Julian\n calendar dates. This integer number corresponds to the noon of\n the date (i.e. 12 hours of Universal Time).\n The procedure was tested to be good since 1 March, -100100 (of both\n calendars) up to a few million years into the future.\n\n @param gy Calendar year (years BC numbered 0, -1, -2, ...)\n @param gm Calendar month (1 to 12)\n @param gd Calendar day of the month (1 to 28/29/30/31)\n @return Julian Day number\n*/\nfunction g2d(gy, gm, gd) {\n var d = div((gy + div(gm - 8, 6) + 100100) * 1461, 4)\n + div(153 * mod(gm + 9, 12) + 2, 5)\n + gd - 34840408\n d = d - div(div(gy + 100100 + div(gm - 8, 6), 100) * 3, 4) + 752\n return d\n}\n\n/*\n Calculates Gregorian and Julian calendar dates from the Julian Day number\n (jdn) for the period since jdn=-34839655 (i.e. the year -100100 of both\n calendars) to some millions years ahead of the present.\n\n @param jdn Julian Day number\n @return\n gy: Calendar year (years BC numbered 0, -1, -2, ...)\n gm: Calendar month (1 to 12)\n gd: Calendar day of the month M (1 to 28/29/30/31)\n*/\nfunction d2g(jdn) {\n var j\n , i\n , gd\n , gm\n , 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 { gy: gy\n , gm: gm\n , gd: gd\n }\n}\n\n/**\n * Return Saturday and Friday day of current week(week start in Saturday)\n * @param {number} jy jalaali year\n * @param {number} jm jalaali month\n * @param {number} jd jalaali day\n * @returns Saturday and Friday of current week\n */\nfunction jalaaliWeek(jy, jm, jd) {\n var dayOfWeek = jalaaliToDateObject(jy, jm, jd).getDay();\n\n var startDayDifference = dayOfWeek == 6 ? 0 : -(dayOfWeek+1);\n var endDayDifference = 6+startDayDifference;\n\n return {\n saturday: d2j(j2d(jy, jm, jd+startDayDifference)),\n friday: d2j(j2d(jy, jm, jd+endDayDifference))\n }\n}\n\n/**\n * Convert Jalaali calendar dates to javascript Date object\n * @param {number} jy jalaali year\n * @param {number} jm jalaali month\n * @param {number} jd jalaali day\n * @param {number} [h] hours\n * @param {number} [m] minutes\n * @param {number} [s] seconds\n * @param {number} [ms] milliseconds\n * @returns Date object of the jalaali calendar dates\n */\nfunction jalaaliToDateObject(\n jy,\n jm,\n jd,\n h,\n m,\n s,\n ms\n) {\n var gregorianCalenderDate = toGregorian(jy, jm, jd);\n\n return new Date(\n gregorianCalenderDate.gy,\n gregorianCalenderDate.gm - 1,\n gregorianCalenderDate.gd,\n h || 0,\n m || 0,\n s || 0,\n ms || 0\n );\n}\n\n/*\n Utility helper functions.\n*/\n\nfunction div(a, b) {\n return ~~(a / b)\n}\n\nfunction mod(a, b) {\n return a - ~~(a / b) * b\n}\n", "'use strict';\n\nvar CalDate = require('caldate');\nvar CalEvent = require('./CalEvent.cjs');\nvar jalaali = require('jalaali-js');\n\nfunction _interopDefaultLegacy (e) { return e && typeof e === 'object' && 'default' in e ? e : { 'default': e }; }\n\nvar CalDate__default = /*#__PURE__*/_interopDefaultLegacy(CalDate);\nvar jalaali__default = /*#__PURE__*/_interopDefaultLegacy(jalaali);\n\nconst { toJalaali, toGregorian } = jalaali__default[\"default\"];\n\nclass Jalaali extends CalEvent {\n /**\n * @param {number} year gregorian year\n * @returns\n */\n inYear (year) {\n const nowruz = toJalaali(year, 1, 1);\n\n if (this.opts.year && nowruz.jy !== this.opts.year) {\n return this\n }\n const { gy, gm, gd } = toGregorian(this.opts.year || nowruz.jy, this.opts.month, this.opts.day);\n\n const d = (new CalDate__default[\"default\"]({ year: gy, month: gm, day: gd })).setOffset(this.offset);\n this.dates.push(d);\n return this\n }\n}\n\nmodule.exports = Jalaali;\n", "'use strict';\n\nvar CalEvent = require('./CalEvent.cjs');\nvar CalDate = require('caldate');\n\nfunction _interopDefaultLegacy (e) { return e && typeof e === 'object' && 'default' in e ? e : { 'default': e }; }\n\nvar CalDate__default = /*#__PURE__*/_interopDefaultLegacy(CalDate);\n\n/**\n * Mapper class for mapped calenders like hijri and hebrew\n * `this.calender` needs to be set in child classes\n */\nclass CalEventMap extends CalEvent {\n constructor (opts) {\n super(opts);\n this.calendar = {};\n }\n\n inYear (year) {\n if (!(this.calendar[year] && this.calendar[year + 1] && this.calendar[year - 1])) {\n return this\n }\n\n for (let y = year - 1; y <= year + 1; y++) {\n // resolve date in `calendar` as gregorian date\n const firstDays = this.calendar[y][this.opts.month - 1];\n // firstDays `[M, D, diffYear, ...] | null`\n if (!firstDays) {\n continue\n }\n for (let i = 0; i < firstDays.length; i += 3) {\n if (this.opts.year) {\n const calYear = this.calendar.year + firstDays[i + 2];\n if (this.opts.year !== calYear) {\n continue\n }\n }\n const d = (new CalDate__default[\"default\"]({\n year: y,\n month: firstDays[i] + 1,\n day: firstDays[i + 1]\n })).setOffset(this.opts.day - 1);\n\n if (d.year === year) {\n this.dates.push(d);\n }\n }\n }\n return this\n }\n}\n\nmodule.exports = CalEventMap;\n", "'use strict';\n\nObject.defineProperty(exports, '__esModule', { value: true });\n\n/*eslint-disable*/\nconst calendar ={1968:[null,null,null,null,null,null,[8,23,0],[9,23,0],[10,22,0],[11,22,0]],1969:[[2,20,0],[3,19,0],[4,18,0],[5,17,0],[6,16,0],[7,15,0],[8,13,1],[9,13,1],[10,11,1],[11,10,1],[0,20,0],[1,19,0],[1,19,0]],1970:[[3,7,1],[4,7,1],[5,5,1],[6,5,1],[7,3,1],[8,2,1],[9,1,2],[9,31,2],[10,29,2],[11,29,2],[0,8,1],[1,7,1],[2,9,1]],1971:[[2,27,2],[3,26,2],[4,25,2],[5,24,2],[6,23,2],[7,22,2],[8,20,3],[9,20,3],[10,19,3],[11,19,3],[0,27,2],[1,26,2],[1,26,2]],1972:[[2,16,3],[3,15,3],[4,14,3],[5,13,3],[6,12,3],[7,11,3],[8,9,4],[9,9,4],[10,7,4],[11,6,4],[0,17,3],[1,16,3],[1,16,3]],1973:[[3,3,4],[4,3,4],[5,1,4],[6,1,4],[6,30,4],[7,29,4],[8,27,5],[9,27,5],[10,26,5],[11,26,5],[0,4,4],[1,3,4],[2,5,4]],1974:[[2,24,5],[3,23,5],[4,22,5],[5,21,5],[6,20,5],[7,19,5],[8,17,6],[9,17,6],[10,15,6],[11,15,6],[0,24,5],[1,23,5],[1,23,5]],1975:[[2,13,6],[3,12,6],[4,11,6],[5,10,6],[6,9,6],[7,8,6],[8,6,7],[9,6,7],[10,5,7],[11,5,7],[0,13,6],[1,12,6],[1,12,6]],1976:[[3,1,7],[4,1,7],[4,30,7],[5,29,7],[6,28,7],[7,27,7],[8,25,8],[9,25,8],[10,23,8],[11,22,8],[0,3,7],[1,2,7],[2,3,7]],1977:[[2,20,8],[3,19,8],[4,18,8],[5,17,8],[6,16,8],[7,15,8],[8,13,9],[9,13,9],[10,11,9],[11,11,9],[0,20,8],[1,19,8],[1,19,8]],1978:[[3,8,9],[4,8,9],[5,6,9],[6,6,9],[7,4,9],[8,3,9],[9,2,10],[10,1,10],[11,1,10],[11,31,10],[0,9,9],[1,8,9],[2,10,9]],1979:[[2,29,10],[3,28,10],[4,27,10],[5,26,10],[6,25,10],[7,24,10],[8,22,11],[9,22,11],[10,21,11],[11,21,11],[0,29,10],[1,28,10],[1,28,10]],1980:[[2,18,11],[3,17,11],[4,16,11],[5,15,11],[6,14,11],[7,13,11],[8,11,12],[9,11,12],[10,9,12],[11,8,12],[0,19,11],[1,18,11],[1,18,11]],1981:[[3,5,12],[4,5,12],[5,3,12],[6,3,12],[7,1,12],[7,31,12],[8,29,13],[9,29,13],[10,27,13],[11,27,13],[0,6,12],[1,5,12],[2,7,12]],1982:[[2,25,13],[3,24,13],[4,23,13],[5,22,13],[6,21,13],[7,20,13],[8,18,14],[9,18,14],[10,17,14],[11,17,14],[0,25,13],[1,24,13],[1,24,13]],1983:[[2,15,14],[3,14,14],[4,13,14],[5,12,14],[6,11,14],[7,10,14],[8,8,15],[9,8,15],[10,7,15],[11,7,15],[0,15,14],[1,14,14],[1,14,14]],1984:[[3,3,15],[4,3,15],[5,1,15],[6,1,15],[6,30,15],[7,29,15],[8,27,16],[9,27,16],[10,25,16],[11,25,16],[0,5,15],[1,4,15],[2,5,15]],1985:[[2,23,16],[3,22,16],[4,21,16],[5,20,16],[6,19,16],[7,18,16],[8,16,17],[9,16,17],[10,14,17],[11,13,17],[0,23,16],[1,22,16],[1,22,16]],1986:[[3,10,17],[4,10,17],[5,8,17],[6,8,17],[7,6,17],[8,5,17],[9,4,18],[10,3,18],[11,3,18],null,[0,11,17],[1,10,17],[2,12,17]],1987:[[2,31,18],[3,30,18],[4,29,18],[5,28,18],[6,27,18],[7,26,18],[8,24,19],[9,24,19],[10,22,19],[0,2,18,11,22,19],[0,31,18],[2,2,18],[2,2,18]],1988:[[2,19,19],[3,18,19],[4,17,19],[5,16,19],[6,15,19],[7,14,19],[8,12,20],[9,12,20],[10,10,20],[11,9,20],[0,20,19],[1,19,19],[1,19,19]],1989:[[3,6,20],[4,6,20],[5,4,20],[6,4,20],[7,2,20],[8,1,20],[8,30,21],[9,30,21],[10,29,21],[11,29,21],[0,7,20],[1,6,20],[2,8,20]],1990:[[2,27,21],[3,26,21],[4,25,21],[5,24,21],[6,23,21],[7,22,21],[8,20,22],[9,20,22],[10,18,22],[11,18,22],[0,27,21],[1,26,21],[1,26,21]],1991:[[2,16,22],[3,15,22],[4,14,22],[5,13,22],[6,12,22],[7,11,22],[8,9,23],[9,9,23],[10,8,23],[11,8,23],[0,16,22],[1,15,22],[1,15,22]],1992:[[3,4,23],[4,4,23],[5,2,23],[6,2,23],[6,31,23],[7,30,23],[8,28,24],[9,28,24],[10,26,24],[11,25,24],[0,6,23],[1,5,23],[2,6,23]],1993:[[2,23,24],[3,22,24],[4,21,24],[5,20,24],[6,19,24],[7,18,24],[8,16,25],[9,16,25],[10,15,25],[11,15,25],[0,23,24],[1,22,24],[1,22,24]],1994:[[2,13,25],[3,12,25],[4,11,25],[5,10,25],[6,9,25],[7,8,25],[8,6,26],[9,6,26],[10,4,26],[11,4,26],[0,13,25],[1,12,25],[1,12,25]],1995:[[3,1,26],[4,1,26],[4,30,26],[5,29,26],[6,28,26],[7,27,26],[8,25,27],[9,25,27],[10,24,27],[11,24,27],[0,2,26],[1,1,26],[2,3,26]],1996:[[2,21,27],[3,20,27],[4,19,27],[5,18,27],[6,17,27],[7,16,27],[8,14,28],[9,14,28],[10,12,28],[11,11,28],[0,22,27],[1,21,27],[1,21,27]],1997:[[3,8,28],[4,8,28],[5,6,28],[6,6,28],[7,4,28],[8,3,28],[9,2,29],[10,1,29],[10,30,29],[11,30,29],[0,9,28],[1,8,28],[2,10,28]],1998:[[2,28,29],[3,27,29],[4,26,29],[5,25,29],[6,24,29],[7,23,29],[8,21,30],[9,21,30],[10,20,30],[11,20,30],[0,28,29],[1,27,29],[1,27,29]],1999:[[2,18,30],[3,17,30],[4,16,30],[5,15,30],[6,14,30],[7,13,30],[8,11,31],[9,11,31],[10,10,31],[11,10,31],[0,18,30],[1,17,30],[1,17,30]],2000:[[3,6,31],[4,6,31],[5,4,31],[6,4,31],[7,2,31],[8,1,31],[8,30,32],[9,30,32],[10,28,32],[11,27,32],[0,8,31],[1,7,31],[2,8,31]],2001:[[2,25,32],[3,24,32],[4,23,32],[5,22,32],[6,21,32],[7,20,32],[8,18,33],[9,18,33],[10,16,33],[11,16,33],[0,25,32],[1,24,32],[1,24,32]],2002:[[2,14,33],[3,13,33],[4,12,33],[5,11,33],[6,10,33],[7,9,33],[8,7,34],[9,7,34],[10,6,34],[11,6,34],[0,14,33],[1,13,33],[1,13,33]],2003:[[3,3,34],[4,3,34],[5,1,34],[6,1,34],[6,30,34],[7,29,34],[8,27,35],[9,27,35],[10,26,35],[11,26,35],[0,4,34],[1,3,34],[2,5,34]],2004:[[2,23,35],[3,22,35],[4,21,35],[5,20,35],[6,19,35],[7,18,35],[8,16,36],[9,16,36],[10,14,36],[11,13,36],[0,24,35],[1,23,35],[1,23,35]],2005:[[3,10,36],[4,10,36],[5,8,36],[6,8,36],[7,6,36],[8,5,36],[9,4,37],[10,3,37],[11,2,37],null,[0,11,36],[1,10,36],[2,12,36]],2006:[[2,30,37],[3,29,37],[4,28,37],[5,27,37],[6,26,37],[7,25,37],[8,23,38],[9,23,38],[10,22,38],[0,1,37,11,22,38],[0,30,37],[2,1,37],[2,1,37]],2007:[[2,20,38],[3,19,38],[4,18,38],[5,17,38],[6,16,38],[7,15,38],[8,13,39],[9,13,39],[10,11,39],[11,10,39],[0,20,38],[1,19,38],[1,19,38]],2008:[[3,6,39],[4,6,39],[5,4,39],[6,4,39],[7,2,39],[8,1,39],[8,30,40],[9,30,40],[10,28,40],[11,28,40],[0,8,39],[1,7,39],[2,8,39]],2009:[[2,26,40],[3,25,40],[4,24,40],[5,23,40],[6,22,40],[7,21,40],[8,19,41],[9,19,41],[10,18,41],[11,18,41],[0,26,40],[1,25,40],[1,25,40]],2010:[[2,16,41],[3,15,41],[4,14,41],[5,13,41],[6,12,41],[7,11,41],[8,9,42],[9,9,42],[10,8,42],[11,8,42],[0,16,41],[1,15,41],[1,15,41]],2011:[[3,5,42],[4,5,42],[5,3,42],[6,3,42],[7,1,42],[7,31,42],[8,29,43],[9,29,43],[10,27,43],[11,27,43],[0,6,42],[1,5,42],[2,7,42]],2012:[[2,24,43],[3,23,43],[4,22,43],[5,21,43],[6,20,43],[7,19,43],[8,17,44],[9,17,44],[10,15,44],[11,14,44],[0,25,43],[1,24,43],[1,24,43]],2013:[[2,12,44],[3,11,44],[4,10,44],[5,9,44],[6,8,44],[7,7,44],[8,5,45],[9,5,45],[10,4,45],[11,4,45],[0,12,44],[1,11,44],[1,11,44]],2014:[[3,1,45],[4,1,45],[4,30,45],[5,29,45],[6,28,45],[7,27,45],[8,25,46],[9,25,46],[10,23,46],[11,23,46],[0,2,45],[1,1,45],[2,3,45]],2015:[[2,21,46],[3,20,46],[4,19,46],[5,18,46],[6,17,46],[7,16,46],[8,14,47],[9,14,47],[10,13,47],[11,13,47],[0,21,46],[1,20,46],[1,20,46]],2016:[[3,9,47],[4,9,47],[5,7,47],[6,7,47],[7,5,47],[8,4,47],[9,3,48],[10,2,48],[11,1,48],[11,30,48],[0,11,47],[1,10,47],[2,11,47]],2017:[[2,28,48],[3,27,48],[4,26,48],[5,25,48],[6,24,48],[7,23,48],[8,21,49],[9,21,49],[10,19,49],[11,19,49],[0,28,48],[1,27,48],[1,27,48]],2018:[[2,17,49],[3,16,49],[4,15,49],[5,14,49],[6,13,49],[7,12,49],[8,10,50],[9,10,50],[10,9,50],[11,9,50],[0,17,49],[1,16,49],[1,16,49]],2019:[[3,6,50],[4,6,50],[5,4,50],[6,4,50],[7,2,50],[8,1,50],[8,30,51],[9,30,51],[10,29,51],[11,29,51],[0,7,50],[1,6,50],[2,8,50]],2020:[[2,26,51],[3,25,51],[4,24,51],[5,23,51],[6,22,51],[7,21,51],[8,19,52],[9,19,52],[10,17,52],[11,16,52],[0,27,51],[1,26,51],[1,26,51]],2021:[[2,14,52],[3,13,52],[4,12,52],[5,11,52],[6,10,52],[7,9,52],[8,7,53],[9,7,53],[10,5,53],[11,5,53],[0,14,52],[1,13,52],[1,13,52]],2022:[[3,2,53],[4,2,53],[4,31,53],[5,30,53],[6,29,53],[7,28,53],[8,26,54],[9,26,54],[10,25,54],[11,25,54],[0,3,53],[1,2,53],[2,4,53]],2023:[[2,23,54],[3,22,54],[4,21,54],[5,20,54],[6,19,54],[7,18,54],[8,16,55],[9,16,55],[10,14,55],[11,13,55],[0,23,54],[1,22,54],[1,22,54]],2024:[[3,9,55],[4,9,55],[5,7,55],[6,7,55],[7,5,55],[8,4,55],[9,3,56],[10,2,56],[11,2,56],null,[0,11,55],[1,10,55],[2,11,55]],2025:[[2,30,56],[3,29,56],[4,28,56],[5,27,56],[6,26,56],[7,25,56],[8,23,57],[9,23,57],[10,21,57],[0,1,56,11,21,57],[0,30,56],[2,1,56],[2,1,56]],2026:[[2,19,57],[3,18,57],[4,17,57],[5,16,57],[6,15,57],[7,14,57],[8,12,58],[9,12,58],[10,11,58],[11,11,58],[0,19,57],[1,18,57],[1,18,57]],2027:[[3,8,58],[4,8,58],[5,6,58],[6,6,58],[7,4,58],[8,3,58],[9,2,59],[10,1,59],[11,1,59],[11,31,59],[0,9,58],[1,8,58],[2,10,58]],2028:[[2,28,59],[3,27,59],[4,26,59],[5,25,59],[6,24,59],[7,23,59],[8,21,60],[9,21,60],[10,19,60],[11,19,60],[0,29,59],[1,28,59],[1,28,59]],2029:[[2,17,60],[3,16,60],[4,15,60],[5,14,60],[6,13,60],[7,12,60],[8,10,61],[9,10,61],[10,8,61],[11,7,61],[0,17,60],[1,16,60],[1,16,60]],2030:[[3,4,61],[4,4,61],[5,2,61],[6,2,61],[6,31,61],[7,30,61],[8,28,62],[9,28,62],[10,27,62],[11,27,62],[0,5,61],[1,4,61],[2,6,61]],2031:[[2,25,62],[3,24,62],[4,23,62],[5,22,62],[6,21,62],[7,20,62],[8,18,63],[9,18,63],[10,16,63],[11,16,63],[0,25,62],[1,24,62],[1,24,62]],2032:[[2,13,63],[3,12,63],[4,11,63],[5,10,63],[6,9,63],[7,8,63],[8,6,64],[9,6,64],[10,4,64],[11,3,64],[0,14,63],[1,13,63],[1,13,63]],2033:[[2,31,64],[3,30,64],[4,29,64],[5,28,64],[6,27,64],[7,26,64],[8,24,65],[9,24,65],[10,23,65],[11,23,65],[0,1,64],[0,31,64],[2,2,64]],2034:[[2,21,65],[3,20,65],[4,19,65],[5,18,65],[6,17,65],[7,16,65],[8,14,66],[9,14,66],[10,13,66],[11,13,66],[0,21,65],[1,20,65],[1,20,65]],2035:[[3,10,66],[4,10,66],[5,8,66],[6,8,66],[7,6,66],[8,5,66],[9,4,67],[10,3,67],[11,2,67],null,[0,11,66],[1,10,66],[2,12,66]],2036:[[2,29,67],[3,28,67],[4,27,67],[5,26,67],[6,25,67],[7,24,67],[8,22,68],[9,22,68],[10,20,68],[0,1,67,11,19,68],[0,30,67],[1,29,67],[1,29,67]],2037:[[2,17,68],[3,16,68],[4,15,68],[5,14,68],[6,13,68],[7,12,68],[8,10,69],[9,10,69],[10,9,69],[11,9,69],[0,17,68],[1,16,68],[1,16,68]],2038:[[3,6,69],[4,6,69],[5,4,69],[6,4,69],[7,2,69],[8,1,69],[8,30,70],[9,30,70],[10,28,70],[11,28,70],[0,7,69],[1,6,69],[2,8,69]],2039:[[2,26,70],[3,25,70],[4,24,70],[5,23,70],[6,22,70],[7,21,70],[8,19,71],[9,19,71],[10,18,71],[11,18,71],[0,26,70],[1,25,70],[1,25,70]],2040:[[2,15,71],[3,14,71],[4,13,71],[5,12,71],[6,11,71],[7,10,71],[8,8,72],[9,8,72],[10,6,72],[11,5,72],[0,16,71],[1,15,71],[1,15,71]],2041:[[3,2,72],[4,2,72],[4,31,72],[5,30,72],[6,29,72],[7,28,72],[8,26,73],[9,26,73],[10,24,73],[11,24,73],[0,3,72],[1,2,72],[2,4,72]],2042:[[2,22,73],[3,21,73],[4,20,73],[5,19,73],[6,18,73],[7,17,73],[8,15,74],[9,15,74],[10,14,74],[11,14,74],[0,22,73],[1,21,73],[1,21,73]],2043:[[3,11,74],[4,11,74],[5,9,74],[6,9,74],[7,7,74],[8,6,74],[9,5,75],[10,4,75],[11,3,75],null,[0,12,74],[1,11,74],[2,13,74]],2044:[[2,29,75],[3,28,75],[4,27,75],[5,26,75],[6,25,75],[7,24,75],[8,22,76],[9,22,76],[10,21,76],[0,1,75,11,21,76],[0,30,75],[1,29,75],[1,29,75]],2045:[[2,19,76],[3,18,76],[4,17,76],[5,16,76],[6,15,76],[7,14,76],[8,12,77],[9,12,77],[10,10,77],[11,10,77],[0,19,76],[1,18,76],[1,18,76]],2046:[[3,7,77],[4,7,77],[5,5,77],[6,5,77],[7,3,77],[8,2,77],[9,1,78],[9,31,78],[10,30,78],[11,30,78],[0,8,77],[1,7,77],[2,9,77]],2047:[[2,28,78],[3,27,78],[4,26,78],[5,25,78],[6,24,78],[7,23,78],[8,21,79],[9,21,79],[10,19,79],[11,18,79],[0,28,78],[1,27,78],[1,27,78]],2048:[[2,15,79],[3,14,79],[4,13,79],[5,12,79],[6,11,79],[7,10,79],[8,8,80],[9,8,80],[10,6,80],[11,6,80],[0,16,79],[1,15,79],[1,15,79]],2049:[[3,3,80],[4,3,80],[5,1,80],[6,1,80],[6,30,80],[7,29,80],[8,27,81],[9,27,81],[10,26,81],[11,26,81],[0,4,80],[1,3,80],[2,5,80]],2050:[[2,24,81],[3,23,81],[4,22,81],[5,21,81],[6,20,81],[7,19,81],[8,17,82],[9,17,82],[10,16,82],[11,16,82],[0,24,81],[1,23,81],[1,23,81]],2051:[[2,14,82],[3,13,82],[4,12,82],[5,11,82],[6,10,82],[7,9,82],[8,7,83],[9,7,83],[10,5,83],[11,4,83],[0,14,82],[1,13,82],[1,13,82]],2052:[[2,31,83],[3,30,83],[4,29,83],[5,28,83],[6,27,83],[7,26,83],[8,24,84],[9,24,84],[10,22,84],[11,22,84],[0,2,83],[1,1,83],[2,2,83]],2053:[[2,20,84],[3,19,84],[4,18,84],[5,17,84],[6,16,84],[7,15,84],[8,13,85],[9,13,85],[10,12,85],[11,12,85],[0,20,84],[1,19,84],[1,19,84]],2054:[[3,9,85],[4,9,85],[5,7,85],[6,7,85],[7,5,85],[8,4,85],[9,3,86],[10,2,86],[11,2,86],null,[0,10,85],[1,9,85],[2,11,85]],2055:[[2,30,86],[3,29,86],[4,28,86],[5,27,86],[6,26,86],[7,25,86],[8,23,87],[9,23,87],[10,21,87],[0,1,86,11,21,87],[0,30,86],[2,1,86],[2,1,86]],2056:[[2,18,87],[3,17,87],[4,16,87],[5,15,87],[6,14,87],[7,13,87],[8,11,88],[9,11,88],[10,9,88],[11,8,88],[0,19,87],[1,18,87],[1,18,87]],2057:[[3,5,88],[4,5,88],[5,3,88],[6,3,88],[7,1,88],[7,31,88],[8,29,89],[9,29,89],[10,28,89],[11,28,89],[0,6,88],[1,5,88],[2,7,88]],2058:[[2,26,89],[3,25,89],[4,24,89],[5,23,89],[6,22,89],[7,21,89],[8,19,90],[9,19,90],[10,17,90],[11,17,90],[0,26,89],[1,25,89],[1,25,89]],2059:[[2,15,90],[3,14,90],[4,13,90],[5,12,90],[6,11,90],[7,10,90],[8,8,91],[9,8,91],[10,6,91],[11,5,91],[0,15,90],[1,14,90],[1,14,90]],2060:[[3,1,91],[4,1,91],[4,30,91],[5,29,91],[6,28,91],[7,27,91],[8,25,92],[9,25,92],[10,24,92],[11,24,92],[0,3,91],[1,2,91],[2,3,91]],2061:[[2,22,92],[3,21,92],[4,20,92],[5,19,92],[6,18,92],[7,17,92],[8,15,93],[9,15,93],[10,14,93],[11,14,93],[0,22,92],[1,21,92],[1,21,92]],2062:[[3,11,93],[4,11,93],[5,9,93],[6,9,93],[7,7,93],[8,6,93],[9,5,94],[10,4,94],[11,3,94],null,[0,12,93],[1,11,93],[2,13,93]],2063:[[2,31,94],[3,30,94],[4,29,94],[5,28,94],[6,27,94],[7,26,94],[8,24,95],[9,24,95],[10,22,95],[0,2,94,11,21,95],[0,31,94],[2,2,94],[2,2,94]],2064:[[2,18,95],[3,17,95],[4,16,95],[5,15,95],[6,14,95],[7,13,95],[8,11,96],[9,11,96],[10,10,96],[11,10,96],[0,19,95],[1,18,95],[1,18,95]],2065:[[3,7,96],[4,7,96],[5,5,96],[6,5,96],[7,3,96],[8,2,96],[9,1,97],[9,31,97],[10,29,97],[11,29,97],[0,8,96],[1,7,96],[2,9,96]],2066:[[2,27,97],[3,26,97],[4,25,97],[5,24,97],[6,23,97],[7,22,97],[8,20,98],[9,20,98],[10,19,98],[11,19,98],[0,27,97],[1,26,97],[1,26,97]],2067:[[2,17,98],[3,16,98],[4,15,98],[5,14,98],[6,13,98],[7,12,98],[8,10,99],[9,10,99],[10,8,99],[11,7,99],[0,17,98],[1,16,98],[1,16,98]],2068:[[3,3,99],[4,3,99],[5,1,99],[6,1,99],[6,30,99],[7,29,99],[8,27,100],[9,27,100],[10,25,100],[11,25,100],[0,5,99],[1,4,99],[2,5,99]],2069:[[2,23,100],[3,22,100],[4,21,100],[5,20,100],[6,19,100],[7,18,100],[8,16,101],[9,16,101],[10,15,101],[11,15,101],[0,23,100],[1,22,100],[1,22,100]],2070:[[2,13,101],[3,12,101],[4,11,101],[5,10,101],[6,9,101],[7,8,101],[8,6,102],[9,6,102],[10,4,102],[11,3,102],[0,13,101],[1,12,101],[1,12,101]],2071:[[2,31,102],[3,30,102],[4,29,102],[5,28,102],[6,27,102],[7,26,102],[8,24,103],[9,24,103],[10,23,103],[11,23,103],[0,1,102],[0,31,102],[2,2,102]],2072:[[2,20,103],[3,19,103],[4,18,103],[5,17,103],[6,16,103],[7,15,103],[8,13,104],[9,13,104],[10,11,104],[11,11,104],[0,21,103],[1,20,103],[1,20,103]],2073:[[3,8,104],[4,8,104],[5,6,104],[6,6,104],[7,4,104],[8,3,104],[9,2,105],[10,1,105],[11,1,105],[11,31,105],[0,9,104],[1,8,104],[2,10,104]],2074:[[2,29,105],[3,28,105],[4,27,105],[5,26,105],[6,25,105],[7,24,105],[8,22,106],[9,22,106],[10,20,106],[11,19,106],[0,29,105],[1,28,105],[1,28,105]],2075:[[2,17,106],[3,16,106],[4,15,106],[5,14,106],[6,13,106],[7,12,106],[8,10,107],[9,10,107],[10,8,107],[11,8,107],[0,17,106],[1,16,106],[1,16,106]],2076:[[3,4,107],[4,4,107],[5,2,107],[6,2,107],[6,31,107],[7,30,107],[8,28,108],[9,28,108],[10,27,108],[11,27,108],[0,6,107],[1,5,107],[2,6,107]],2077:[[2,25,108],[3,24,108],[4,23,108],[5,22,108],[6,21,108],[7,20,108],[8,18,109],[9,18,109],[10,17,109],[11,17,109],[0,25,108],[1,24,108],[1,24,108]],2078:[[2,15,109],[3,14,109],[4,13,109],[5,12,109],[6,11,109],[7,10,109],[8,8,110],[9,8,110],[10,6,110],[11,5,110],[0,15,109],[1,14,109],[1,14,109]],2079:[[3,2,110],[4,2,110],[4,31,110],[5,30,110],[6,29,110],[7,28,110],[8,26,111],[9,26,111],[10,24,111],[11,24,111],[0,3,110],[1,2,110],[2,4,110]],2080:[[2,21,111],[3,20,111],[4,19,111],[5,18,111],[6,17,111],[7,16,111],[8,14,112],[9,14,112],[10,13,112],[11,13,112],[0,22,111],[1,21,111],[1,21,111]],2081:[[3,10,112],[4,10,112],[5,8,112],[6,8,112],[7,6,112],[8,5,112],[9,4,113],[10,3,113],[11,3,113],null,[0,11,112],[1,10,112],[2,12,112]],2082:[[2,31,113],[3,30,113],[4,29,113],[5,28,113],[6,27,113],[7,26,113],[8,24,114],[9,24,114],[10,22,114],[0,2,113,11,22,114],[0,31,113],[2,2,113],[2,2,113]],2083:[[2,20,114],[3,19,114],[4,18,114],[5,17,114],[6,16,114],[7,15,114],[8,13,115],[9,13,115],[10,11,115],[11,10,115],[0,20,114],[1,19,114],[1,19,114]],2084:[[3,6,115],[4,6,115],[5,4,115],[6,4,115],[7,2,115],[8,1,115],[8,30,116],[9,30,116],[10,29,116],[11,29,116],[0,8,115],[1,7,115],[2,8,115]],2085:[[2,27,116],[3,26,116],[4,25,116],[5,24,116],[6,23,116],[7,22,116],[8,20,117],[9,20,117],[10,18,117],[11,18,117],[0,27,116],[1,26,116],[1,26,116]],2086:[[2,16,117],[3,15,117],[4,14,117],[5,13,117],[6,12,117],[7,11,117],[8,9,118],[9,9,118],[10,7,118],[11,6,118],[0,16,117],[1,15,117],[1,15,117]],2087:[[3,3,118],[4,3,118],[5,1,118],[6,1,118],[6,30,118],[7,29,118],[8,27,119],[9,27,119],[10,26,119],[11,26,119],[0,4,118],[1,3,118],[2,5,118]],2088:[[2,23,119],[3,22,119],[4,21,119],[5,20,119],[6,19,119],[7,18,119],[8,16,120],[9,16,120],[10,14,120],[11,14,120],[0,24,119],[1,23,119],[1,23,119]],2089:[[2,12,120],[3,11,120],[4,10,120],[5,9,120],[6,8,120],[7,7,120],[8,5,121],[9,5,121],[10,4,121],[11,4,121],[0,12,120],[1,11,120],[1,11,120]],2090:[[3,1,121],[4,1,121],[4,30,121],[5,29,121],[6,28,121],[7,27,121],[8,25,122],[9,25,122],[10,23,122],[11,22,122],[0,2,121],[1,1,121],[2,3,121]],2091:[[2,20,122],[3,19,122],[4,18,122],[5,17,122],[6,16,122],[7,15,122],[8,13,123],[9,13,123],[10,12,123],[11,12,123],[0,20,122],[1,19,122],[1,19,122]],2092:[[3,8,123],[4,8,123],[5,6,123],[6,6,123],[7,4,123],[8,3,123],[9,2,124],[10,1,124],[10,30,124],[11,30,124],[0,10,123],[1,9,123],[2,10,123]],2093:[[2,28,124],[3,27,124],[4,26,124],[5,25,124],[6,24,124],[7,23,124],[8,21,125],[9,21,125],[10,20,125],[11,20,125],[0,28,124],[1,27,124],[1,27,124]],2094:[[2,18,125],[3,17,125],[4,16,125],[5,15,125],[6,14,125],[7,13,125],[8,11,126],[9,11,126],[10,9,126],[11,8,126],[0,18,125],[1,17,125],[1,17,125]],2095:[[3,5,126],[4,5,126],[5,3,126],[6,3,126],[7,1,126],[7,31,126],[8,29,127],[9,29,127],[10,27,127],[11,27,127],[0,6,126],[1,5,126],[2,7,126]],2096:[[2,24,127],[3,23,127],[4,22,127],[5,21,127],[6,20,127],[7,19,127],[8,17,128],[9,17,128],[10,16,128],[11,16,128],[0,25,127],[1,24,127],[1,24,127]],2097:[[2,14,128],[3,13,128],[4,12,128],[5,11,128],[6,10,128],[7,9,128],[8,7,129],[9,7,129],[10,6,129],[11,6,129],[0,14,128],[1,13,128],[1,13,128]],2098:[[3,3,129],[4,3,129],[5,1,129],[6,1,129],[6,30,129],[7,29,129],[8,27,130],[9,27,130],[10,25,130],[11,24,130],[0,4,129],[1,3,129],[2,5,129]],2099:[[2,22,130],[3,21,130],[4,20,130],[5,19,130],[6,18,130],[7,17,130],[8,15,131],[9,15,131],[10,13,131],[11,13,131],[0,22,130],[1,21,130],[1,21,130]],2100:[[3,10,131],[4,10,131],[5,8,131],[6,8,131],[7,6,131],[8,5,131],null,null,null,null,[0,11,131],[1,10,131],[2,12,131]],months:13,year:5729};\n\nexports.calendar = calendar;\n", "'use strict';\n\nvar CalDate = require('caldate');\nvar CalEventMap = require('./CalEventMap.cjs');\nvar hebrewCalendar = require('./internal/hebrew-calendar.cjs');\n\nfunction _interopDefaultLegacy (e) { return e && typeof e === 'object' && 'default' in e ? e : { 'default': e }; }\n\nvar CalDate__default = /*#__PURE__*/_interopDefaultLegacy(CalDate);\n\nclass Hebrew extends CalEventMap {\n constructor (opts) {\n super(opts);\n this.calendar = hebrewCalendar.calendar;\n }\n\n get (timezone) {\n const arr = this.dates.map((date) => {\n const cdate = new CalDate__default[\"default\"](date);\n const o = {\n date: cdate.toString() + ' -0600',\n start: cdate.setOffset(-6, 'h').toTimezone(timezone),\n end: cdate.toEndDate().toTimezone(timezone)\n };\n this._addSubstitute(date, o);\n return o\n });\n return arr\n }\n}\n\nmodule.exports = Hebrew;\n", "'use strict';\n\nObject.defineProperty(exports, '__esModule', { value: true });\n\n/*eslint-disable*/\nconst calendar ={1969:[[2,19,0],[3,18,0],[4,17,0],[5,16,0],[6,15,0],[7,14,0],[8,12,0],[9,12,0],[10,10,0],[11,10,0]],1970:[[2,9,1],[3,8,1],[4,7,1],[5,6,1],[6,5,1],[7,4,1],[8,2,1],[9,2,1],[10,1,1],[10,30,1],[0,8,0,11,30,1],[1,7,0]],1971:[[1,26,2],[2,28,2],[3,26,2],[4,26,2],[5,24,2],[6,24,2],[7,22,2],[8,21,2],[9,20,2],[10,19,2],[11,18,2],[0,28,1]],1972:[[1,16,3],[2,16,3],[3,14,3],[4,14,3],[5,12,3],[6,12,3],[7,10,3],[8,9,3],[9,8,3],[10,7,3],[11,6,3],[0,17,2]],1973:[[1,4,4],[2,6,4],[3,4,4],[4,4,4],[5,2,4],[6,1,4],[6,30,4],[7,29,4],[8,27,4],[9,27,4],[10,25,4],[0,5,3,11,25,4]],1974:[[0,24,5],[1,23,5],[2,24,5],[3,23,5],[4,22,5],[5,21,5],[6,20,5],[7,19,5],[8,17,5],[9,16,5],[10,15,5],[11,15,5]],1975:[[0,13,6],[1,12,6],[2,13,6],[3,12,6],[4,12,6],[5,10,6],[6,10,6],[7,8,6],[8,6,6],[9,6,6],[10,4,6],[11,4,6]],1976:[[0,2,7,11,22,8],[1,1,7],[2,1,7],[2,31,7],[3,30,7],[4,30,7],[5,28,7],[6,28,7],[7,26,7],[8,24,7],[9,24,7],[10,22,7]],1977:[[11,11,9],[0,20,8],[1,19,8],[2,20,8],[3,19,8],[4,19,8],[5,17,8],[6,17,8],[7,15,8],[8,14,8],[9,13,8],[10,12,8]],1978:[[11,1,10],[0,10,9,11,30,10],[1,8,9],[2,10,9],[3,8,9],[4,8,9],[5,6,9],[6,6,9],[7,5,9],[8,3,9],[9,3,9],[10,1,9]],1979:[[10,20,11],[11,20,11],[0,29,10],[1,27,10],[2,29,10],[3,27,10],[4,27,10],[5,25,10],[6,25,10],[7,23,10],[8,22,10],[9,22,10]],1980:[[10,9,12],[11,8,12],[0,19,11],[1,17,11],[2,18,11],[3,16,11],[4,15,11],[5,14,11],[6,13,11],[7,12,11],[8,10,11],[9,10,11]],1981:[[9,28,13],[10,27,13],[0,7,12,11,27,13],[1,5,12],[2,7,12],[3,5,12],[4,5,12],[5,3,12],[6,2,12],[7,1,12],[7,30,12],[8,29,12]],1982:[[9,18,14],[10,16,14],[11,16,14],[0,26,13],[1,24,13],[2,26,13],[3,24,13],[4,24,13],[5,22,13],[6,21,13],[7,20,13],[8,18,13]],1983:[[9,7,15],[10,5,15],[11,5,15],[0,15,14],[1,14,14],[2,15,14],[3,14,14],[4,13,14],[5,12,14],[6,11,14],[7,9,14],[8,8,14]],1984:[[8,26,16],[9,25,16],[10,23,16],[0,4,15,11,23,16],[1,2,15],[2,3,15],[3,2,15],[4,2,15],[4,31,15],[5,30,15],[6,29,15],[7,27,15]],1985:[[8,15,17],[9,15,17],[10,13,17],[11,13,17],[0,22,16],[1,20,16],[2,22,16],[3,21,16],[4,20,16],[5,19,16],[6,18,16],[7,17,16]],1986:[[8,5,18],[9,4,18],[10,3,18],[11,2,18],[0,11,17],[1,10,17],[2,11,17],[3,10,17],[4,9,17],[5,8,17],[6,8,17],[7,6,17]],1987:[[7,25,19],[8,24,19],[9,23,19],[10,22,19],[0,1,18,11,21,19],[0,30,18],[2,1,18],[2,30,18],[3,29,18],[4,28,18],[5,27,18],[6,26,18]],1988:[[7,13,20],[8,12,20],[9,11,20],[10,10,20],[11,10,20],[0,20,19],[1,18,19],[2,19,19],[3,17,19],[4,16,19],[5,15,19],[6,14,19]],1989:[[7,2,21],[8,1,21],[8,30,21],[9,30,21],[10,29,21],[0,8,20,11,29,21],[1,7,20],[2,8,20],[3,7,20],[4,6,20],[5,4,20],[6,4,20]],1990:[[6,23,22],[7,21,22],[8,20,22],[9,19,22],[10,18,22],[11,18,22],[0,27,21],[1,26,21],[2,27,21],[3,26,21],[4,25,21],[5,23,21]],1991:[[6,12,23],[7,11,23],[8,9,23],[9,8,23],[10,7,23],[11,7,23],[0,16,22],[1,15,22],[2,17,22],[3,15,22],[4,15,22],[5,13,22]],1992:[[6,1,24],[6,30,24],[7,29,24],[8,27,24],[9,26,24],[10,25,24],[0,5,23,11,25,24],[1,4,23],[2,5,23],[3,4,23],[4,3,23],[5,2,23]],1993:[[5,21,25],[6,20,25],[7,18,25],[8,17,25],[9,16,25],[10,14,25],[11,14,25],[0,23,24],[1,22,24],[2,24,24],[3,22,24],[4,22,24]],1994:[[5,10,26],[6,9,26],[7,8,26],[8,6,26],[9,6,26],[10,4,26],[11,3,26],[0,12,25],[1,11,25],[2,13,25],[3,12,25],[4,11,25]],1995:[[4,30,27],[5,29,27],[6,28,27],[7,27,27],[8,25,27],[9,25,27],[10,23,27],[0,2,26,11,23,27],[0,31,26],[2,2,26],[3,1,26],[3,30,26]],1996:[[4,18,28],[5,17,28],[6,16,28],[7,15,28],[8,13,28],[9,13,28],[10,12,28],[11,11,28],[0,21,27],[1,19,27],[2,20,27],[3,18,27]],1997:[[4,7,29],[5,6,29],[6,5,29],[7,4,29],[8,2,29],[9,2,29],[10,1,29],[11,1,29],[0,10,28,11,30,29],[1,8,28],[2,10,28],[3,8,28]],1998:[[3,27,30],[4,26,30],[5,25,30],[6,24,30],[7,23,30],[8,21,30],[9,21,30],[10,20,30],[11,19,30],[0,29,29],[1,27,29],[2,29,29]],1999:[[3,17,31],[4,16,31],[5,15,31],[6,14,31],[7,12,31],[8,11,31],[9,10,31],[10,9,31],[11,9,31],[0,18,30],[1,17,30],[2,18,30]],2000:[[3,6,32],[4,5,32],[5,3,32],[6,3,32],[7,1,32],[7,30,32],[8,28,32],[9,28,32],[10,27,32],[0,8,31,11,27,32],[1,7,31],[2,7,31]],2001:[[2,26,33],[3,25,33],[4,24,33],[5,22,33],[6,22,33],[7,20,33],[8,18,33],[9,17,33],[10,16,33],[11,16,33],[0,26,32],[1,24,32]],2002:[[2,15,34],[3,14,34],[4,13,34],[5,12,34],[6,11,34],[7,10,34],[8,8,34],[9,7,34],[10,6,34],[11,5,34],[0,15,33],[1,13,33]],2003:[[2,4,35],[3,3,35],[4,2,35],[5,1,35],[6,1,35],[6,30,35],[7,29,35],[8,27,35],[9,26,35],[10,25,35],[0,4,34,11,24,35],[1,2,34]],2004:[[1,21,36],[2,22,36],[3,20,36],[4,20,36],[5,19,36],[6,18,36],[7,17,36],[8,15,36],[9,15,36],[10,14,36],[11,13,36],[0,23,35]],2005:[[1,10,37],[2,11,37],[3,10,37],[4,9,37],[5,8,37],[6,7,37],[7,6,37],[8,5,37],[9,4,37],[10,3,37],[11,3,37],[0,12,36]],2006:[[0,31,38],[2,1,38],[2,30,38],[3,29,38],[4,28,38],[5,26,38],[6,26,38],[7,25,38],[8,24,38],[9,23,38],[10,22,38],[0,1,37,11,22,38]],2007:[[0,20,39],[1,19,39],[2,20,39],[3,18,39],[4,18,39],[5,16,39],[6,15,39],[7,14,39],[8,13,39],[9,13,39],[10,11,39],[11,11,39]],2008:[[0,10,40,11,29,41],[1,8,40],[2,9,40],[3,7,40],[4,6,40],[5,5,40],[6,4,40],[7,2,40],[8,1,40],[9,1,40],[9,30,40],[10,29,40]],2009:[[11,18,42],[0,27,41],[1,26,41],[2,28,41],[3,26,41],[4,25,41],[5,24,41],[6,23,41],[7,22,41],[8,20,41],[9,20,41],[10,18,41]],2010:[[11,7,43],[0,16,42],[1,15,42],[2,17,42],[3,15,42],[4,15,42],[5,13,42],[6,13,42],[7,11,42],[8,10,42],[9,9,42],[10,7,42]],2011:[[10,26,44],[0,5,43,11,26,44],[1,4,43],[2,6,43],[3,5,43],[4,4,43],[5,3,43],[6,2,43],[7,1,43],[7,30,43],[8,29,43],[9,28,43]],2012:[[10,15,45],[11,14,45],[0,24,44],[1,23,44],[2,24,44],[3,22,44],[4,22,44],[5,21,44],[6,20,44],[7,19,44],[8,17,44],[9,17,44]],2013:[[10,4,46],[11,4,46],[0,13,45],[1,11,45],[2,13,45],[3,11,45],[4,11,45],[5,10,45],[6,9,45],[7,8,45],[8,7,45],[9,6,45]],2014:[[9,25,47],[10,23,47],[0,2,46,11,23,47],[1,1,46],[2,2,46],[3,1,46],[3,30,46],[4,30,46],[5,28,46],[6,28,46],[7,27,46],[8,25,46]],2015:[[9,14,48],[10,13,48],[11,12,48],[0,21,47],[1,20,47],[2,21,47],[3,20,47],[4,19,47],[5,18,47],[6,17,47],[7,16,47],[8,14,47]],2016:[[9,2,49],[10,1,49],[10,30,49],[0,11,48,11,30,49],[1,10,48],[2,10,48],[3,8,48],[4,8,48],[5,6,48],[6,6,48],[7,4,48],[8,2,48]],2017:[[8,21,50],[9,21,50],[10,19,50],[11,19,50],[0,29,49],[1,28,49],[2,29,49],[3,27,49],[4,27,49],[5,25,49],[6,24,49],[7,23,49]],2018:[[8,11,51],[9,10,51],[10,9,51],[11,8,51],[0,18,50],[1,17,50],[2,18,50],[3,17,50],[4,16,50],[5,15,50],[6,14,50],[7,12,50]],2019:[[7,31,52],[8,30,52],[9,29,52],[10,28,52],[0,7,51,11,27,52],[1,6,51],[2,8,51],[3,6,51],[4,6,51],[5,4,51],[6,4,51],[7,2,51]],2020:[[7,20,53],[8,18,53],[9,18,53],[10,16,53],[11,16,53],[0,26,52],[1,25,52],[2,25,52],[3,24,52],[4,24,52],[5,22,52],[6,22,52]],2021:[[7,9,54],[8,8,54],[9,7,54],[10,6,54],[11,5,54],[0,14,53],[1,13,53],[2,14,53],[3,13,53],[4,13,53],[5,11,53],[6,11,53]],2022:[[6,30,55],[7,28,55],[8,27,55],[9,26,55],[10,25,55],[0,4,54,11,25,55],[1,2,54],[2,4,54],[3,2,54],[4,2,54],[4,31,54],[5,30,54]],2023:[[6,19,56],[7,17,56],[8,16,56],[9,16,56],[10,15,56],[11,14,56],[0,23,55],[1,21,55],[2,23,55],[3,21,55],[4,21,55],[5,19,55]],2024:[[6,7,57],[7,5,57],[8,4,57],[9,4,57],[10,3,57],[11,3,57],[0,13,56],[1,11,56],[2,11,56],[3,10,56],[4,9,56],[5,7,56]],2025:[[5,26,58],[6,26,58],[7,24,58],[8,23,58],[9,23,58],[10,22,58],[0,1,57,11,21,58],[0,31,57],[2,1,57],[2,30,57],[3,29,57],[4,28,57]],2026:[[5,16,59],[6,15,59],[7,14,59],[8,12,59],[9,12,59],[10,11,59],[11,10,59],[0,20,58],[1,18,58],[2,20,58],[3,18,58],[4,18,58]],2027:[[5,6,60],[6,5,60],[7,3,60],[8,2,60],[9,1,60],[9,31,60],[10,29,60],[0,9,59,11,29,60],[1,8,59],[2,9,59],[3,8,59],[4,7,59]],2028:[[4,25,61],[5,24,61],[6,23,61],[7,22,61],[8,20,61],[9,19,61],[10,18,61],[11,17,61],[0,28,60],[1,26,60],[2,27,60],[3,26,60]],2029:[[4,14,62],[5,13,62],[6,13,62],[7,11,62],[8,10,62],[9,9,62],[10,7,62],[11,7,62],[0,16,61],[1,14,61],[2,16,61],[3,15,61]],2030:[[4,3,63],[5,2,63],[6,2,63],[7,1,63],[7,30,63],[8,29,63],[9,28,63],[10,26,63],[0,5,62,11,26,63],[1,4,62],[2,5,62],[3,4,62]],2031:[[3,23,64],[4,22,64],[5,21,64],[6,21,64],[7,20,64],[8,18,64],[9,17,64],[10,16,64],[11,15,64],[0,24,63],[1,23,63],[2,24,63]],2032:[[3,11,65],[4,10,65],[5,9,65],[6,9,65],[7,8,65],[8,6,65],[9,6,65],[10,4,65],[11,4,65],[0,14,64],[1,12,64],[2,13,64]],2033:[[3,1,66],[3,30,66],[4,29,66],[5,28,66],[6,28,66],[7,26,66],[8,25,66],[9,24,66],[10,23,66],[0,2,65,11,23,66],[1,1,65],[2,2,65]],2034:[[2,21,67],[3,20,67],[4,19,67],[5,17,67],[6,17,67],[7,15,67],[8,14,67],[9,13,67],[10,12,67],[11,12,67],[0,21,66],[1,20,66]],2035:[[2,11,68],[3,9,68],[4,9,68],[5,7,68],[6,6,68],[7,5,68],[8,3,68],[9,2,68],[10,1,68],[11,1,68],[0,11,67,11,30,68],[1,9,67]],2036:[[1,28,69],[2,29,69],[3,27,69],[4,27,69],[5,25,69],[6,24,69],[7,23,69],[8,21,69],[9,20,69],[10,19,69],[11,19,69],[0,29,68]],2037:[[1,16,70],[2,18,70],[3,17,70],[4,16,70],[5,15,70],[6,14,70],[7,12,70],[8,11,70],[9,10,70],[10,8,70],[11,8,70],[0,17,69]],2038:[[1,5,71],[2,7,71],[3,6,71],[4,5,71],[5,4,71],[6,3,71],[7,2,71],[7,31,71],[8,30,71],[9,29,71],[10,27,71],[0,7,70,11,27,71]],2039:[[0,26,72],[1,24,72],[2,26,72],[3,24,72],[4,24,72],[5,23,72],[6,22,72],[7,21,72],[8,19,72],[9,19,72],[10,17,72],[11,17,72]],2040:[[0,15,73],[1,14,73],[2,14,73],[3,13,73],[4,12,73],[5,11,73],[6,10,73],[7,9,73],[8,7,73],[9,7,73],[10,6,73],[11,5,73]],2041:[[0,4,74,11,24,75],[1,2,74],[2,4,74],[3,2,74],[4,1,74],[4,31,74],[5,29,74],[6,29,74],[7,28,74],[8,26,74],[9,26,74],[10,25,74]],2042:[[11,14,76],[0,23,75],[1,21,75],[2,23,75],[3,21,75],[4,20,75],[5,19,75],[6,18,75],[7,17,75],[8,15,75],[9,15,75],[10,14,75]],2043:[[11,3,77],[0,12,76],[1,11,76],[2,12,76],[3,11,76],[4,10,76],[5,8,76],[6,8,76],[7,6,76],[8,4,76],[9,4,76],[10,3,76]],2044:[[10,21,78],[0,2,77,11,21,78],[0,31,77],[2,1,77],[2,30,77],[3,29,77],[4,28,77],[5,26,77],[6,26,77],[7,24,77],[8,23,77],[9,22,77]],2045:[[10,10,79],[11,10,79],[0,19,78],[1,18,78],[2,20,78],[3,18,78],[4,18,78],[5,16,78],[6,15,78],[7,14,78],[8,12,78],[9,12,78]],2046:[[9,31,80],[10,29,80],[0,8,79,11,28,80],[1,7,79],[2,9,79],[3,7,79],[4,7,79],[5,5,79],[6,5,79],[7,3,79],[8,2,79],[9,1,79]],2047:[[9,20,81],[10,19,81],[11,18,81],[0,27,80],[1,26,80],[2,27,80],[3,26,80],[4,26,80],[5,24,80],[6,24,80],[7,23,80],[8,21,80]],2048:[[9,9,82],[10,7,82],[11,7,82],[0,16,81],[1,15,81],[2,16,81],[3,14,81],[4,14,81],[5,12,81],[6,12,81],[7,11,81],[8,10,81]],2049:[[8,28,83],[9,28,83],[10,26,83],[0,5,82,11,26,83],[1,3,82],[2,5,82],[3,3,82],[4,3,82],[5,2,82],[6,1,82],[6,31,82],[7,30,82]],2050:[[8,17,84],[9,17,84],[10,15,84],[11,15,84],[0,24,83],[1,23,83],[2,24,83],[3,22,83],[4,22,83],[5,20,83],[6,20,83],[7,19,83]],2051:[[8,6,85],[9,6,85],[10,5,85],[11,4,85],[0,14,84],[1,12,84],[2,14,84],[3,12,84],[4,11,84],[5,10,84],[6,9,84],[7,8,84]],2052:[[7,26,86],[8,24,86],[9,24,86],[10,22,86],[0,3,85,11,22,86],[1,2,85],[2,2,85],[3,1,85],[3,30,85],[4,29,85],[5,28,85],[6,27,85]],2053:[[7,15,87],[8,13,87],[9,13,87],[10,11,87],[11,11,87],[0,21,86],[1,20,86],[2,21,86],[3,20,86],[4,19,86],[5,17,86],[6,17,86]],2054:[[7,5,88],[8,3,88],[9,2,88],[10,1,88],[10,30,88],[0,10,87,11,30,88],[1,9,87],[2,10,87],[3,9,87],[4,9,87],[5,7,87],[6,6,87]],2055:[[6,25,89],[7,24,89],[8,22,89],[9,21,89],[10,20,89],[11,19,89],[0,29,88],[1,27,88],[2,29,88],[3,28,88],[4,28,88],[5,26,88]],2056:[[6,14,90],[7,12,90],[8,11,90],[9,10,90],[10,8,90],[11,8,90],[0,18,89],[1,17,89],[2,17,89],[3,16,89],[4,16,89],[5,14,89]],2057:[[6,3,91],[7,1,91],[7,31,91],[8,30,91],[9,29,91],[10,27,91],[0,6,90,11,27,91],[1,5,90],[2,6,90],[3,5,90],[4,5,90],[5,3,90]],2058:[[5,22,92],[6,21,92],[7,20,92],[8,19,92],[9,18,92],[10,17,92],[11,17,92],[0,25,91],[1,24,91],[2,25,91],[3,24,91],[4,23,91]],2059:[[5,11,93],[6,11,93],[7,9,93],[8,8,93],[9,8,93],[10,6,93],[11,6,93],[0,15,92],[1,14,92],[2,15,92],[3,13,92],[4,13,92]],2060:[[4,31,94],[5,29,94],[6,28,94],[7,27,94],[8,26,94],[9,25,94],[10,24,94],[0,5,93,11,24,94],[1,3,93],[2,4,93],[3,2,93],[4,1,93]],2061:[[4,20,95],[5,19,95],[6,18,95],[7,16,95],[8,15,95],[9,15,95],[10,13,95],[11,13,95],[0,23,94],[1,21,94],[2,23,94],[3,21,94]],2062:[[4,10,96],[5,8,96],[6,8,96],[7,6,96],[8,4,96],[9,4,96],[10,3,96],[11,2,96],[0,12,95],[1,10,95],[2,12,95],[3,11,95]],2063:[[3,30,97],[4,29,97],[5,27,97],[6,27,97],[7,25,97],[8,24,97],[9,23,97],[10,22,97],[0,1,96,11,21,97],[0,31,96],[2,1,96],[2,31,96]],2064:[[3,18,98],[4,17,98],[5,16,98],[6,15,98],[7,14,98],[8,12,98],[9,12,98],[10,10,98],[11,9,98],[0,20,97],[1,18,97],[2,19,97]],2065:[[3,7,99],[4,6,99],[5,5,99],[6,5,99],[7,3,99],[8,2,99],[9,1,99],[9,31,99],[10,29,99],[0,8,98,11,28,99],[1,6,98],[2,8,98]],2066:[[2,27,100],[3,25,100],[4,25,100],[5,24,100],[6,24,100],[7,22,100],[8,21,100],[9,20,100],[10,19,100],[11,18,100],[0,27,99],[1,25,99]],2067:[[2,16,101],[3,15,101],[4,14,101],[5,13,101],[6,13,101],[7,11,101],[8,10,101],[9,10,101],[10,8,101],[11,8,101],[0,16,100],[1,15,100]],2068:[[2,5,102],[3,3,102],[4,3,102],[5,1,102],[6,1,102],[6,30,102],[7,29,102],[8,28,102],[9,27,102],[10,26,102],[0,6,101,11,25,102],[1,4,101]],2069:[[1,23,103],[2,24,103],[3,22,103],[4,22,103],[5,20,103],[6,20,103],[7,18,103],[8,17,103],[9,16,103],[10,15,103],[11,15,103],[0,24,102]],2070:[[1,12,104],[2,14,104],[3,12,104],[4,11,104],[5,10,104],[6,9,104],[7,8,104],[8,6,104],[9,5,104],[10,4,104],[11,4,104],[0,13,103]],2071:[[1,1,105],[2,3,105],[3,2,105],[4,1,105],[4,30,105],[5,29,105],[6,28,105],[7,26,105],[8,25,105],[9,24,105],[10,23,105],[0,2,104,11,22,105]],2072:[[0,21,106],[1,20,106],[2,21,106],[3,19,106],[4,19,106],[5,17,106],[6,17,106],[7,15,106],[8,13,106],[9,13,106],[10,11,106],[11,11,106]],2073:[[0,9,107,11,30,108],[1,8,107],[2,10,107],[3,9,107],[4,8,107],[5,7,107],[6,6,107],[7,5,107],[8,3,107],[9,2,107],[10,1,107],[10,30,107]],2074:[[11,19,109],[0,28,108],[1,27,108],[2,29,108],[3,27,108],[4,27,108],[5,26,108],[6,25,108],[7,23,108],[8,22,108],[9,21,108],[10,20,108]],2075:[[11,9,110],[0,18,109],[1,16,109],[2,18,109],[3,16,109],[4,16,109],[5,15,109],[6,14,109],[7,13,109],[8,11,109],[9,11,109],[10,9,109]],2076:[[10,27,111],[0,7,110,11,27,111],[1,6,110],[2,6,110],[3,5,110],[4,4,110],[5,3,110],[6,2,110],[7,1,110],[7,30,110],[8,29,110],[9,29,110]],2077:[null,null,[0,26,111],[1,24,111],[2,25,111],[3,24,111],[4,23,111],[5,21,111],[6,21,111],[7,19,111],[8,18,111],[9,18,111]],year:1389};\n\nexports.calendar = calendar;\n", "'use strict';\n\nvar CalDate = require('caldate');\nvar CalEventMap = require('./CalEventMap.cjs');\nvar hijriCalendar = require('./internal/hijri-calendar.cjs');\n\nfunction _interopDefaultLegacy (e) { return e && typeof e === 'object' && 'default' in e ? e : { 'default': e }; }\n\nvar CalDate__default = /*#__PURE__*/_interopDefaultLegacy(CalDate);\n\nclass Hijri extends CalEventMap {\n constructor (opts) {\n super(opts);\n this.calendar = hijriCalendar.calendar;\n }\n\n get (timezone) {\n const arr = this.dates.map((date) => {\n const cdate = new CalDate__default[\"default\"](date);\n const o = {\n date: cdate.toString() + ' -0600',\n start: cdate.setOffset(-6, 'h').toTimezone(timezone),\n end: cdate.toEndDate().toTimezone(timezone)\n };\n this._addSubstitute(date, o);\n return o\n });\n return arr\n }\n}\n\nmodule.exports = Hijri;\n", "'use strict';\n\nObject.defineProperty(exports, '__esModule', { value: true });\n\nconst m = {\n L: {\n \"0\": [\n [1.75347045673, 0, 0],\n [0.03341656453, 4.66925680415, 6283.0758499914],\n [0.00034894275, 4.62610242189, 12566.1516999828],\n [0.00003417572, 2.82886579754, 3.523118349],\n [0.00003497056, 2.74411783405, 5753.3848848968],\n [0.00003135899, 3.62767041756, 77713.7714681205],\n [0.00002676218, 4.41808345438, 7860.4193924392],\n [0.00002342691, 6.13516214446, 3930.2096962196],\n [0.00001273165, 2.03709657878, 529.6909650946],\n [0.00001324294, 0.74246341673, 11506.7697697936],\n [0.00000901854, 2.04505446477, 26.2983197998],\n [0.00001199167, 1.10962946234, 1577.3435424478],\n [0.00000857223, 3.50849152283, 398.1490034082],\n [0.00000779786, 1.17882681962, 5223.6939198022],\n [0.0000099025, 5.23268072088, 5884.9268465832],\n [0.00000753141, 2.53339052847, 5507.5532386674],\n [0.00000505267, 4.58292599973, 18849.2275499742],\n [0.00000492392, 4.20505711826, 775.522611324],\n [0.00000356672, 2.91954114478, 0.0673103028],\n [0.00000284125, 1.89869240932, 796.2980068164],\n [0.00000242879, 0.34481445893, 5486.777843175],\n [0.00000317087, 5.84901948512, 11790.6290886588],\n [0.00000271112, 0.31486255375, 10977.078804699],\n [0.00000206217, 4.80646631478, 2544.3144198834],\n [0.00000205478, 1.86953770281, 5573.1428014331],\n [0.00000202318, 2.45767790232, 6069.7767545534],\n [0.00000126225, 1.08295459501, 20.7753954924],\n [0.00000155516, 0.83306084617, 213.299095438],\n [0.00000115132, 0.64544911683, 0.9803210682],\n [0.00000102851, 0.63599845579, 4694.0029547076],\n [0.00000101724, 4.2667980198, 7.1135470008],\n [9.9206e-7, 6.20992926918, 2146.1654164752],\n [0.00000132212, 3.41118292683, 2942.4634232916],\n [9.7607e-7, 0.68101342359, 155.4203994342],\n [8.5128e-7, 1.29870764804, 6275.9623029906],\n [7.4651e-7, 1.755089133, 5088.6288397668],\n [0.00000101895, 0.97569280312, 15720.8387848784],\n [8.4711e-7, 3.67080093031, 71430.69561812909],\n [7.3547e-7, 4.67926633877, 801.8209311238],\n [7.3874e-7, 3.50319414955, 3154.6870848956],\n [7.8757e-7, 3.03697458703, 12036.4607348882],\n [7.9637e-7, 1.80791287082, 17260.1546546904],\n [8.5803e-7, 5.9832263126, 161000.6857376741],\n [5.6963e-7, 2.78430458592, 6286.5989683404],\n [6.1148e-7, 1.81839892984, 7084.8967811152],\n [6.9627e-7, 0.83297621398, 9437.762934887],\n [5.6116e-7, 4.38694865354, 14143.4952424306],\n [6.2449e-7, 3.97763912806, 8827.3902698748],\n [5.1145e-7, 0.28306832879, 5856.4776591154],\n [5.5577e-7, 3.47006059924, 6279.5527316424],\n [4.1036e-7, 5.36817592855, 8429.2412664666],\n [5.1605e-7, 1.33282739866, 1748.016413067],\n [5.1992e-7, 0.18914947184, 12139.5535091068],\n [4.9e-7, 0.48735014197, 1194.4470102246],\n [3.92e-7, 6.16833020996, 10447.3878396044],\n [3.557e-7, 1.775968892, 6812.766815086],\n [3.677e-7, 6.04133863162, 10213.285546211],\n [3.6596e-7, 2.56957481827, 1059.3819301892],\n [3.3296e-7, 0.59310278598, 17789.845619785],\n [3.5954e-7, 1.70875808777, 2352.8661537718],\n [4.0938e-7, 2.39850938714, 19651.048481098],\n [3.0047e-7, 2.73975124088, 1349.8674096588],\n [3.0412e-7, 0.44294464169, 83996.84731811189],\n [2.3663e-7, 0.48473622521, 8031.0922630584],\n [2.3574e-7, 2.06528133162, 3340.6124266998],\n [2.1089e-7, 4.14825468851, 951.7184062506],\n [2.4738e-7, 0.21484762138, 3.5904286518],\n [2.5352e-7, 3.16470891653, 4690.4798363586],\n [2.2823e-7, 5.22195230819, 4705.7323075436],\n [2.1419e-7, 1.42563910473, 16730.4636895958],\n [2.1891e-7, 5.55594302779, 553.5694028424],\n [1.7481e-7, 4.56052900312, 135.0650800354],\n [1.9927e-7, 5.22209149316, 12168.0026965746],\n [1.986e-7, 5.77470242235, 6309.3741697912],\n [2.03e-7, 0.37133792946, 283.8593188652],\n [1.4421e-7, 4.19315052005, 242.728603974],\n [1.6225e-7, 5.98837767951, 11769.8536931664],\n [1.5077e-7, 4.1956716337, 6256.7775301916],\n [1.9124e-7, 3.82219958698, 23581.2581773176],\n [1.8888e-7, 5.38626892076, 149854.4001348079],\n [1.4346e-7, 3.72355084422, 38.0276726358],\n [1.7898e-7, 2.21490566029, 13367.9726311066],\n [1.2054e-7, 2.62229602614, 955.5997416086],\n [1.1287e-7, 0.17739329984, 4164.311989613],\n [1.3973e-7, 4.40134615007, 6681.2248533996],\n [1.3621e-7, 1.88934516495, 7632.9432596502],\n [1.2503e-7, 1.13052412208, 5.5229243074],\n [1.0498e-7, 5.35909979317, 1592.5960136328],\n [9.803e-8, 0.99948172646, 11371.7046897582],\n [9.22e-8, 4.57138585348, 4292.3308329504],\n [1.0327e-7, 6.19982170609, 6438.4962494256],\n [1.2003e-7, 1.00351462266, 632.7837393132],\n [1.0827e-7, 0.32734523824, 103.0927742186],\n [8.356e-8, 4.53902748706, 25132.3033999656],\n [1.0005e-7, 6.0291496328, 5746.271337896],\n [8.409e-8, 3.29946177848, 7234.794256242],\n [8.006e-8, 5.82145271855, 28.4491874678],\n [1.0523e-7, 0.93870455544, 11926.2544136688],\n [7.686e-8, 3.1214364064, 7238.6755916],\n [9.378e-8, 2.62413793196, 5760.4984318976],\n [8.127e-8, 6.11227839253, 4732.0306273434],\n [9.232e-8, 0.48344234496, 522.5774180938],\n [9.802e-8, 5.24413877132, 27511.4678735372],\n [7.871e-8, 0.99590133077, 5643.1785636774],\n [8.123e-8, 6.27053020099, 426.598190876],\n [9.048e-8, 5.33686323585, 6386.16862421],\n [8.621e-8, 4.16537179089, 7058.5984613154],\n [6.297e-8, 4.71723143652, 6836.6452528338],\n [7.575e-8, 3.97381357237, 11499.6562227928],\n [7.756e-8, 2.95728422442, 23013.5395395872],\n [7.314e-8, 0.60652522715, 11513.8833167944],\n [5.955e-8, 2.87641047954, 6283.14316029419],\n [6.534e-8, 5.79046406784, 18073.7049386502],\n [7.188e-8, 3.99831461988, 74.7815985673],\n [7.346e-8, 4.38582423903, 316.3918696566],\n [5.413e-8, 5.39199023275, 419.4846438752],\n [5.127e-8, 2.36059551778, 10973.55568635],\n [7.056e-8, 0.32258442532, 263.0839233728],\n [6.624e-8, 3.6647416584, 17298.1823273262],\n [6.762e-8, 5.91131766896, 90955.5516944961],\n [4.938e-8, 5.73672172371, 9917.6968745098],\n [5.547e-8, 2.45152589382, 12352.8526045448],\n [5.958e-8, 3.3205134466, 6283.0085396886],\n [4.471e-8, 2.06386138131, 7079.3738568078],\n [6.153e-8, 1.45823347458, 233141.3144043615],\n [4.348e-8, 4.42338625285, 5216.5803728014],\n [6.124e-8, 1.07494838623, 19804.8272915828],\n [4.488e-8, 3.65285033073, 206.1855484372],\n [4.02e-8, 0.83995823171, 20.3553193988],\n [5.188e-8, 4.06503864016, 6208.2942514241],\n [5.307e-8, 0.38216728132, 31441.6775697568],\n [3.785e-8, 2.34369213733, 3.881335358],\n [4.497e-8, 3.27230792447, 11015.1064773348],\n [4.132e-8, 0.92129851256, 3738.761430108],\n [3.521e-8, 5.9784480361, 3894.1818295422],\n [4.215e-8, 1.90601721876, 245.8316462294],\n [3.701e-8, 5.03067498875, 536.8045120954],\n [3.866e-8, 1.82632980909, 11856.2186514245],\n [3.652e-8, 1.01840564429, 16200.7727245012],\n [3.39e-8, 0.97784870142, 8635.9420037632],\n [3.737e-8, 2.9537891957, 3128.3887650958],\n [3.507e-8, 3.71291946317, 6290.1893969922],\n [3.086e-8, 3.64646921512, 10.6366653498],\n [3.397e-8, 1.10589356888, 14712.317116458],\n [3.334e-8, 0.83684903082, 6496.3749454294],\n [2.805e-8, 2.58503711584, 14314.1681130498],\n [3.65e-8, 1.08344142571, 88860.05707098669],\n [3.388e-8, 3.20182380957, 5120.6011455836],\n [3.252e-8, 3.47857474229, 6133.5126528568],\n [2.553e-8, 3.9486902726, 1990.745017041],\n [3.52e-8, 2.05559692878, 244287.60000722768],\n [2.565e-8, 1.56072409371, 23543.23050468179],\n [2.621e-8, 3.85639359951, 266.6070417218],\n [2.954e-8, 3.39692614359, 9225.539273283],\n [2.876e-8, 6.02633318445, 154717.6098876827],\n [2.395e-8, 1.16130078696, 10984.1923516998],\n [3.161e-8, 1.32798862116, 10873.9860304804],\n [3.163e-8, 5.08946546862, 21228.3920235458],\n [2.361e-8, 4.27212461943, 6040.3472460174],\n [3.03e-8, 1.80210001168, 35371.8872659764],\n [2.343e-8, 3.57688971514, 10969.9652576982],\n [2.618e-8, 2.57870151918, 22483.84857449259],\n [2.113e-8, 3.71711179417, 65147.6197681377],\n [2.019e-8, 0.81393923319, 170.6728706192],\n [2.003e-8, 0.38091017375, 6172.869528772],\n [2.506e-8, 3.74378169126, 10575.4066829418],\n [2.381e-8, 0.10581361289, 7.046236698],\n [1.949e-8, 4.86892513469, 36.0278666774],\n [2.074e-8, 4.22802468213, 5650.2921106782],\n [1.924e-8, 5.59460549844, 6282.0955289232],\n [1.949e-8, 1.06999605576, 5230.807466803],\n [1.988e-8, 5.19734705445, 6262.300454499],\n [1.887e-8, 3.74365662683, 23.8784377478],\n [1.787e-8, 1.25929659066, 12559.038152982],\n [1.883e-8, 1.90364058477, 15.252471185],\n [1.816e-8, 3.68083794819, 15110.4661198662],\n [1.701e-8, 4.41109562589, 110.2063212194],\n [1.99e-8, 3.93295788548, 6206.8097787158],\n [2.103e-8, 0.75354936681, 13521.7514415914],\n [1.774e-8, 0.48750515837, 1551.045222648],\n [1.882e-8, 0.86685462305, 22003.9146348698],\n [1.924e-8, 1.22901099088, 709.9330485583],\n [2.073e-8, 4.62531597856, 6037.244203762],\n [1.924e-8, 0.60231842492, 6284.0561710596],\n [1.596e-8, 3.98332879712, 13916.0191096416],\n [1.664e-8, 4.41947015623, 8662.240323563],\n [1.971e-8, 1.04560686192, 18209.33026366019],\n [1.942e-8, 4.31335979989, 6244.9428143536],\n [1.476e-8, 0.93274523818, 2379.1644735716],\n [1.81e-8, 0.49112137707, 1.4844727083],\n [1.346e-8, 1.51574753411, 4136.9104335162],\n [1.528e-8, 5.61833568587, 6127.6554505572],\n [1.791e-8, 3.22191142746, 39302.096962196],\n [1.747e-8, 3.05595292589, 18319.5365848796],\n [1.432e-8, 4.51123984264, 20426.571092422],\n [1.695e-8, 0.22049418623, 25158.6017197654],\n [1.242e-8, 4.46665354536, 17256.6315363414],\n [1.463e-8, 4.69248613506, 14945.3161735544],\n [1.205e-8, 1.86911906771, 4590.910180489],\n [1.19e-8, 2.74169967367, 12569.6748183318],\n [1.222e-8, 5.18120087481, 5333.9002410216],\n [1.39e-8, 5.42888623322, 143571.32428481648],\n [1.473e-8, 1.70487100866, 11712.9553182308],\n [1.362e-8, 2.61069503292, 6062.6632075526],\n [1.148e-8, 6.0300843061, 3634.6210245184],\n [1.198e-8, 5.15296117339, 10177.2576795336],\n [1.266e-8, 0.11422490557, 18422.62935909819],\n [1.411e-8, 1.09910890045, 3496.032826134],\n [1.349e-8, 2.99804623019, 17654.7805397496],\n [1.253e-8, 2.79844902576, 167283.7615876655],\n [1.311e-8, 1.609410743, 5481.2549188676],\n [1.079e-8, 6.20304501787, 3.2863574178],\n [1.181e-8, 1.20653777627, 131.5419616864],\n [1.254e-8, 5.45103277799, 6076.8903015542],\n [1.036e-8, 2.32136959491, 7342.4577801806],\n [1.117e-8, 0.38842340979, 949.1756089698],\n [9.66e-9, 3.18352079941, 11087.2851259184],\n [1.171e-8, 3.39635167732, 12562.6285816338],\n [1.121e-8, 0.72631814699, 220.4126424388],\n [1.024e-8, 2.19381113265, 11403.676995575],\n [8.88e-9, 3.91167196431, 4686.8894077068],\n [9.1e-9, 1.98802695087, 735.8765135318],\n [8.23e-9, 0.48822202854, 24072.9214697764],\n [1.096e-8, 6.17377835617, 5436.9930152402],\n [9.08e-9, 0.44959148878, 7477.522860216],\n [9.74e-9, 1.52996313552, 9623.6882766912],\n [8.4e-9, 1.79540573407, 5429.8794682394],\n [7.78e-9, 6.17703744517, 38.1330356378],\n [7.76e-9, 4.09859968447, 14.2270940016],\n [1.068e-8, 4.64209577648, 43232.3066584156],\n [9.54e-9, 1.49985885818, 1162.4747044078],\n [9.07e-9, 0.86986870809, 10344.2950653858],\n [9.31e-9, 4.06049877517, 28766.924424484],\n [7.39e-9, 5.04368192034, 639.897286314],\n [9.65e-9, 3.44286716197, 1589.0728952838],\n [7.63e-9, 5.86304776787, 16858.4825329332],\n [9.53e-9, 4.20801492835, 11190.377900137],\n [7.08e-9, 1.72432323967, 13095.8426650774],\n [9.69e-9, 1.64437243011, 29088.811415985],\n [7.17e-9, 0.16688678895, 11.729352836],\n [9.62e-9, 3.53101876172, 12416.5885028482],\n [7.45e-9, 5.77741082302, 12592.4500197826],\n [6.72e-9, 1.91091228744, 3.9321532631],\n [6.71e-9, 5.46240758839, 18052.9295431578],\n [6.75e-9, 6.28311649798, 4535.0594369244],\n [6.84e-9, 0.39975011401, 5849.3641121146],\n [7.99e-9, 0.29859056777, 12132.439962106],\n [7.58e-9, 0.96370719224, 1052.2683831884],\n [7.82e-9, 5.33875702541, 13517.8701062334],\n [7.3e-9, 1.70114998543, 17267.26820169119],\n [7.49e-9, 2.59607005624, 11609.8625440122],\n [7.34e-9, 2.7842049778, 640.8776073822],\n [6.88e-9, 5.15097673557, 16496.3613962024],\n [7.7e-9, 1.62459252416, 4701.1165017084],\n [6.33e-9, 2.20588443066, 25934.1243310894],\n [7.6e-9, 4.21317219403, 377.3736079158],\n [5.84e-9, 2.13420121623, 10557.5941608238],\n [5.72e-9, 0.24649745829, 9779.1086761254],\n [5.73e-9, 3.16435264609, 533.2140834436],\n [6.85e-9, 3.19344289472, 12146.6670561076],\n [6.75e-9, 0.96179234176, 10454.5013866052],\n [6.48e-9, 1.46327342554, 6268.8487559898],\n [5.89e-9, 2.50543543638, 3097.88382272579],\n [5.51e-9, 5.28106257475, 9388.0059094152],\n [6.96e-9, 3.6534215555, 4804.209275927],\n [6.69e-9, 2.5103005926, 2388.8940204492],\n [5.5e-9, 0.06883090057, 20199.094959633],\n [6.29e-9, 4.13350997495, 45892.73043315699],\n [6.78e-9, 6.09190163533, 135.62532501],\n [5.93e-9, 1.50129499103, 226858.23855437007],\n [5.42e-9, 3.58582033525, 6148.010769956],\n [5.99e-9, 6.12058050643, 18875.525869774],\n [6.82e-9, 5.0221361683, 17253.04110768959],\n [5.65e-9, 4.29309214275, 11933.3679606696],\n [4.86e-9, 0.77746204893, 27.4015560968],\n [5.03e-9, 0.58974557727, 15671.0817594066],\n [6.16e-9, 4.06539884128, 227.476132789],\n [5.37e-9, 2.15064382406, 21954.15760939799],\n [6.69e-9, 6.06995500278, 47162.5163546352],\n [5.4e-9, 2.83444221432, 5326.7866940208],\n [4.74e-9, 0.40346826846, 6915.8595893046],\n [5.32e-9, 5.26131065063, 10988.808157535],\n [5.82e-9, 3.24533095664, 153.7788104848],\n [6.41e-9, 3.24711790399, 2107.0345075424],\n [6.19e-9, 3.08302108547, 33019.0211122046],\n [4.66e-9, 3.14982369789, 10440.2742926036],\n [4.66e-9, 0.90708835651, 5966.6839803348],\n [5.28e-9, 0.8192645447, 813.5502839598],\n [6.03e-9, 3.81378921927, 316428.22867391503],\n [5.59e-9, 1.8189498573, 17996.0311682222],\n [4.37e-9, 2.28631745987, 6303.8512454838],\n [5.18e-9, 4.86068318058, 20597.2439630412],\n [4.24e-9, 6.23520018697, 6489.2613984286],\n [5.18e-9, 6.17617826756, 0.2438174835],\n [4.04e-9, 5.72804304258, 5642.1982426092],\n [4.58e-9, 1.34117773914, 6287.0080032545],\n [5.48e-9, 5.6845445832, 155427.542936241],\n [5.47e-9, 1.03391472434, 3646.3503773544],\n [4.28e-9, 4.6980968782, 846.0828347512],\n [4.13e-9, 6.0252069939, 6279.4854213396],\n [5.34e-9, 3.03030638223, 66567.48586525429],\n [3.83e-9, 1.4905558804, 19800.9459562248],\n [4.11e-9, 5.28384176408, 18451.07854656599],\n [3.52e-9, 4.68891600525, 4907.3020501456],\n [4.8e-9, 5.36572651091, 348.924420448],\n [3.44e-9, 5.89157452889, 6546.1597733642],\n [3.4e-9, 0.37557440365, 13119.72110282519],\n [4.34e-9, 4.98417856239, 6702.5604938666],\n [3.32e-9, 2.6890934443, 29296.6153895786],\n [4.48e-9, 2.16478480251, 5905.7022420756],\n [3.44e-9, 2.06546633735, 49.7570254718],\n [3.15e-9, 1.24023810969, 4061.2192153944],\n [3.24e-9, 2.30897526929, 5017.508371365],\n [4.13e-9, 0.17171692945, 6286.6662786432],\n [4.31e-9, 3.8660110138, 12489.8856287072],\n [3.49e-9, 4.55372493131, 4933.2084403326],\n [3.23e-9, 0.41971136084, 10770.8932562618],\n [3.41e-9, 2.68612860807, 11.0457002639],\n [3.16e-9, 3.52966641606, 17782.7320727842],\n [3.15e-9, 5.63357264999, 568.8218740274],\n [3.4e-9, 3.83571212349, 10660.6869350424],\n [2.96e-9, 0.62703270489, 20995.3929664494],\n [4.05e-9, 1.00084965393, 16460.33352952499],\n [4.14e-9, 1.21998752076, 51092.7260508548],\n [3.36e-9, 4.71465945215, 6179.9830757728],\n [3.61e-9, 3.71235613733, 28237.2334593894],\n [3.27e-9, 1.05606504715, 11919.140866668],\n [3.27e-9, 6.1422242098, 6254.6266625236],\n [2.68e-9, 2.47224339737, 664.75604513],\n [2.69e-9, 1.86210872453, 23141.5583829246],\n [3.45e-9, 0.93461290184, 6058.7310542895],\n [3.53e-9, 4.50033650657, 36949.2308084242],\n [3.44e-9, 6.26166140367, 24356.7807886416],\n [3e-9, 4.46964001975, 6418.1409300268],\n [2.6e-9, 4.04967464725, 6525.8044539654],\n [2.98e-9, 2.20018811054, 156137.47598479927],\n [2.53e-9, 3.49930797865, 29864.334027309],\n [2.54e-9, 2.44883530154, 5331.3574437408],\n [2.96e-9, 0.84341183907, 5729.506447149],\n [2.41e-9, 2.00721298729, 16737.5772365966],\n [3.11e-9, 1.23668016336, 6281.5913772831],\n [3.32e-9, 3.55576945724, 7668.6374249425],\n [2.36e-9, 2.47437156031, 6245.0481773556],\n [2.64e-9, 4.43924412283, 12964.300703391],\n [2.57e-9, 1.79654471948, 11080.1715789176],\n [2.6e-9, 3.3307759606, 5888.4499649322],\n [2.85e-9, 0.3088636143, 11823.1616394502],\n [2.9e-9, 5.70141882483, 77.673770428],\n [2.55e-9, 4.00939662024, 5881.4037282342],\n [2.53e-9, 4.73318512715, 16723.350142595],\n [2.28e-9, 0.95333661324, 5540.0857894588],\n [2.81e-9, 1.29199646396, 22805.7355659936],\n [3.19e-9, 1.38633229189, 163096.18036118348],\n [2.24e-9, 1.65156322696, 10027.9031957292],\n [2.26e-9, 0.34125379653, 17796.9591667858],\n [2.36e-9, 4.19817431922, 19.66976089979],\n [2.81e-9, 4.14114899916, 12539.853380183],\n [2.75e-9, 5.50306930248, 32.5325507914],\n [2.23e-9, 5.23334210294, 56.8983749356],\n [2.17e-9, 6.08598789777, 6805.6532680852],\n [2.28e-9, 5.17114391778, 11720.0688652316],\n [2.74e-9, 4.50716805713, 6016.4688082696],\n [2.45e-9, 3.96486270306, 22.7752014508],\n [2.2e-9, 4.7207808197, 6.62855890001],\n [2.07e-9, 5.71701403951, 41.5507909848],\n [2.04e-9, 3.9122741125, 2699.7348193176],\n [2.09e-9, 0.86881969024, 6321.1035226272],\n [2e-9, 2.11984442601, 4274.5183108324],\n [2e-9, 5.39839888151, 6019.9919266186],\n [2.09e-9, 5.67606291663, 11293.4706743556],\n [2.52e-9, 1.6496572935, 9380.9596727172],\n [2.75e-9, 5.04826903506, 73.297125859],\n [2.08e-9, 1.88207277133, 11300.5842213564],\n [2.06e-9, 5.0728488933, 6277.552925684],\n [2.72e-9, 0.74640924904, 1975.492545856],\n [1.99e-9, 3.30813142103, 22743.4093795164],\n [2.69e-9, 4.48560812155, 64471.99124174489],\n [1.92e-9, 2.17463565107, 5863.5912061162],\n [2.28e-9, 5.85373115869, 128.0188433374],\n [2.61e-9, 2.64321183295, 55022.9357470744],\n [1.96e-9, 2.4853762232, 16062.1845261168],\n [1.87e-9, 1.3189176028, 29826.3063546732],\n [2.2e-9, 5.75012110079, 29.429508536],\n [1.87e-9, 4.03230554718, 467.9649903544],\n [2e-9, 5.60555262896, 1066.49547719],\n [2.31e-9, 1.09802712785, 12341.8069042809],\n [1.98e-9, 0.29474229005, 149.5631971346],\n [2.49e-9, 5.1047702317, 7875.6718636242],\n [1.79e-9, 0.87066197995, 12721.572099417],\n [2.03e-9, 1.56914310573, 28286.9904848612],\n [1.98e-9, 3.54061588502, 30.914125635],\n [1.71e-9, 3.45366018621, 5327.4761083828],\n [1.83e-9, 0.72325421604, 6272.0301497275],\n [2.16e-9, 2.97175184412, 19402.7969528166],\n [1.68e-9, 2.51559879907, 23937.856389741],\n [1.95e-9, 0.09045393425, 156.4007205024],\n [2.16e-9, 0.42162375972, 23539.7073863328],\n [1.89e-9, 0.37542530191, 9814.6041002912],\n [2.07e-9, 2.01752547259, 238004.5241572363],\n [2.18e-9, 2.36835893645, 16627.3709153772],\n [1.66e-9, 4.23182960518, 16840.67001081519],\n [2e-9, 2.02153258098, 16097.6799502826],\n [1.69e-9, 0.91318727, 95.9792272178],\n [2.11e-9, 5.73370637657, 151.8972810852],\n [2.04e-9, 0.42643085174, 515.463871093],\n [2.12e-9, 3.00223140894, 12043.574281889],\n [1.92e-9, 5.46153589821, 6379.0550772092],\n [1.6e-9, 6.23798383332, 202.2533951741],\n [2.15e-9, 0.20889073407, 5621.8429232104],\n [1.5e-9, 3.12999753018, 799.8211251654],\n [1.87e-9, 2.12345787867, 491.6632924588],\n [1.92e-9, 1.33928820063, 394.6258850592],\n [1.49e-9, 2.65697593276, 21.335640467],\n [1.46e-9, 5.58021191726, 412.3710968744],\n [1.56e-9, 3.7565767638, 12323.4230960088],\n [1.43e-9, 3.28248547724, 29.8214381488],\n [1.44e-9, 1.07862546598, 1265.5674786264],\n [1.48e-9, 0.2338663109, 10021.8372800994],\n [1.64e-9, 0.94288727597, 14919.0178537546],\n [1.93e-9, 5.92751083827, 40879.4405046438],\n [1.4e-9, 4.97612440269, 158.9435177832],\n [1.48e-9, 2.61651818006, 17157.0618804718],\n [1.4e-9, 3.66947933935, 26084.0218062162],\n [1.47e-9, 5.09968173403, 661.232926781],\n [1.47e-9, 1.36976712162, 4171.4255366138],\n [1.34e-9, 4.79432636012, 111.1866422876],\n [1.4e-9, 1.27748013377, 107.6635239386],\n [1.71e-9, 2.77586207403, 26735.9452622132],\n [1.83e-9, 5.43418358741, 369.6998159404],\n [1.34e-9, 3.09132862833, 17.812522118],\n [1.32e-9, 3.05633896779, 22490.9621214934],\n [1.81e-9, 4.22950689891, 966.9708774356],\n [1.66e-9, 3.67660435776, 15508.6151232744],\n [1.52e-9, 5.28885813387, 12669.2444742014],\n [1.5e-9, 5.86819430895, 97238.62754448749],\n [1.45e-9, 5.07330784304, 87.30820453981],\n [1.33e-9, 5.65471067133, 31.9723058168],\n [1.24e-9, 2.83326216907, 12566.2190102856],\n [1.4e-9, 5.84212721453, 22476.73502749179],\n [1.34e-9, 3.12858101887, 32217.2001810808],\n [1.37e-9, 0.86487461904, 9924.8104215106],\n [1.72e-9, 1.98369595114, 174242.4659640497],\n [1.7e-9, 4.41115280254, 327574.51427678124],\n [1.28e-9, 4.49087631612, 31415.379249957],\n [1.51e-9, 0.46542092001, 39609.6545831656],\n [1.53e-9, 3.78801830344, 17363.24742890899],\n [1.65e-9, 5.31654110459, 16943.7627850338],\n [1.65e-9, 4.06747587817, 58953.145443294],\n [1.18e-9, 0.63846333239, 6.0659156298],\n [1.59e-9, 0.86086959274, 221995.02880149524],\n [1.19e-9, 5.96432932413, 1385.8952763362],\n [1.14e-9, 5.16516114595, 25685.872802808],\n [1.12e-9, 4.92889233335, 56.8032621698],\n [1.19e-9, 2.40626699328, 18635.9284545362],\n [1.15e-9, 0.23374479051, 418.9243989006],\n [1.13e-9, 2.7938757674, 6272.4391846416],\n [1.22e-9, 0.936940724, 24492.40611365159],\n [1.33e-9, 4.87155573413, 22345.2603761082],\n [1.13e-9, 3.80362889046, 6293.7125153412],\n [1.3e-9, 3.72996018683, 12573.2652469836],\n [1.07e-9, 3.40227152756, 21393.5419698576],\n [1.22e-9, 1.00385670948, 95143.1329209781],\n [1.4e-9, 1.094130757, 44809.6502008634],\n [1.12e-9, 6.05462382871, 433.7117378768],\n [1.23e-9, 4.55640196386, 239424.39025435288],\n [1.04e-9, 1.54931540602, 127.9515330346],\n [1.11e-9, 3.04186517428, 8982.810669309],\n [1.02e-9, 4.12448497391, 15664.03552270859],\n [1.07e-9, 4.67919356465, 77690.75950573849],\n [1.18e-9, 4.5232017012, 19004.6479494084],\n [1.07e-9, 5.71774478555, 77736.78343050249],\n [1.03e-9, 4.79332126649, 33794.5437235286],\n [1.43e-9, 1.81201813018, 4214.0690150848],\n [1.02e-9, 3.7581778657, 58864.5439181463],\n [1.25e-9, 1.14419195615, 625.6701923124],\n [1.24e-9, 3.27736513892, 12566.08438968],\n [1.1e-9, 1.08705709966, 2787.0430238574],\n [1.02e-9, 4.75119578149, 12242.6462833254],\n [1.01e-9, 4.91289409429, 401.6721217572],\n [1.38e-9, 2.89578979744, 9411.4646150872],\n [1.29e-9, 1.23516042371, 12029.3471878874],\n [1.38e-9, 2.45654707076, 7576.560073574],\n [9.8e-10, 5.4477176502, 29026.48522950779],\n [1.34e-9, 1.43105174912, 86464.6133168312],\n [1.08e-9, 0.9898977494, 5636.0650166766],\n [1.17e-9, 5.17362847134, 34520.3093093808],\n [9.7e-10, 3.34717130592, 16310.9790457206],\n [1.07e-9, 2.94547931851, 24602.61243487099],\n [9.8e-10, 4.37041908717, 34513.2630726828],\n [1.25e-9, 2.72182830814, 24065.80792277559],\n [1.11e-9, 0.58899131543, 6303.4311693902],\n [1.02e-9, 0.66938025772, 10239.5838660108],\n [1.19e-9, 1.21666517886, 1478.8665740644],\n [1.11e-9, 1.04321934681, 16522.6597160022],\n [9.4e-10, 4.31076339857, 26880.3198130326],\n [9.8e-10, 4.14248433763, 6599.467719648],\n [9.5e-10, 2.89807657534, 34911.412076091],\n [9.7e-10, 0.89642320201, 71980.63357473118],\n [9.5e-10, 0.65717727948, 6288.5987742988],\n [1.16e-9, 4.19967201116, 206.7007372966],\n [9.5e-10, 1.78315464297, 18139.2945014159],\n [9.9e-10, 1.37437847718, 1039.0266107904],\n [1.26e-9, 3.21642544972, 305281.9430710488],\n [9.4e-10, 0.6899503186, 7834.1210726394],\n [9.5e-10, 5.58111421744, 3104.9300594238],\n [1.08e-9, 0.52696637156, 276.7457718644],\n [1.24e-9, 3.43899862683, 172146.9713405403],\n [8.7e-10, 1.18764938806, 18842.11400297339],\n [8.7e-10, 0.09094166389, 15141.390794312],\n [1.08e-9, 1.03363414379, 82576.9812209953],\n [1.19e-9, 2.86729109648, 90394.82301305079],\n [1.04e-9, 3.39218586218, 290.972865866],\n [9.4e-10, 5.68284937444, 32367.0976562076],\n [1.17e-9, 0.78475956902, 83286.91426955358],\n [1.05e-9, 3.96551057233, 6357.8574485587],\n [9.4e-10, 4.03443174853, 13341.6743113068],\n [9.6e-10, 0.92742567538, 1062.9050485382],\n [8.9e-10, 4.45371820659, 792.7748884674],\n [8.7e-10, 0.40013481685, 90279.92316810328],\n [1.13e-9, 2.48165313368, 48739.859897083],\n [8.7e-10, 3.43122851097, 27707.5424942948],\n [1.01e-9, 5.32081603011, 2301.58581590939],\n [8.4e-10, 0.67020912458, 28628.3362260996],\n [8.2e-10, 0.87060089842, 10241.2022911672],\n [8.6e-10, 4.6206479229, 36147.4098773004],\n [8e-10, 4.77649625396, 6819.8803620868],\n [9.5e-10, 2.87032913492, 23020.65308658799],\n [1.07e-9, 5.77864921649, 34115.1140692746],\n [1.1e-9, 3.32898859416, 72140.6286666874],\n [8.7e-10, 4.40657711727, 142.1786270362],\n [1.03e-9, 4.2250672681, 30666.1549584328],\n [8.2e-10, 3.89404392552, 5547.1993364596],\n [1.09e-9, 1.94546065204, 24279.10701821359],\n [8.7e-10, 4.32472045435, 742.9900605326],\n [1.07e-9, 4.91580912547, 277.0349937414],\n [8.8e-10, 2.10180817713, 26482.1708096244],\n [8.6e-10, 4.01895021483, 12491.3701014155],\n [1.06e-9, 5.49092372854, 62883.3551395136],\n [8e-10, 6.1978570495, 6709.6740408674],\n [1.05e-9, 2.44166529175, 6298.3283211764],\n [8.3e-10, 4.90662164029, 51.28033786241],\n [7.4e-10, 2.34622575625, 7018.9523635232],\n [7.8e-10, 6.06947270265, 148434.53403769128],\n [7.9e-10, 3.03048221644, 838.9692877504],\n [7.3e-10, 3.05008665738, 567.7186377304],\n [1.02e-9, 3.59223815483, 22380.755800274],\n [8.4e-10, 0.46604373274, 45.1412196366],\n [9.2e-10, 4.12917744733, 18216.443810661],\n [9.1e-10, 0.49382398887, 6453.7487206106],\n [7.3e-10, 1.72446569088, 21424.4666443034],\n [6.9e-10, 1.4937267773, 21548.9623692918],\n [6.9e-10, 4.73181018058, 8858.3149443206],\n [7.7e-10, 0.47683782532, 11520.9968637952],\n [7.8e-10, 5.4394263099, 15265.8865193004],\n [7.7e-10, 2.53773750372, 76.2660712756],\n [6.9e-10, 2.53932635192, 9910.583327509],\n [7.5e-10, 0.1559472921, 23006.42599258639],\n [7.8e-10, 2.41004950269, 6393.2821712108],\n [6.7e-10, 5.05152846816, 57375.8019008462],\n [7.7e-10, 3.9107560486, 24383.0791084414],\n [6.7e-10, 0.78239147387, 12779.4507954208],\n [7.1e-10, 1.24817900687, 10419.9862835076],\n [6.7e-10, 5.7785122776, 6311.5250374592],\n [6.1e-10, 2.66705754411, 18852.7506683232],\n [7.9e-10, 1.89137330427, 6528.9074962208],\n [8.4e-10, 5.11523704221, 50317.2034395308],\n [5.9e-10, 3.38290426621, 35707.7100829074],\n [6.5e-10, 4.66767908854, 26709.6469424134],\n [7.9e-10, 5.59773848156, 71960.38658322369],\n [6.1e-10, 3.30733768968, 18845.7044316252],\n [5.7e-10, 3.90831298022, 5999.2165311262],\n [5.8e-10, 3.92572820333, 30348.883772767],\n [6.1e-10, 0.05695045822, 7856.89627409019],\n [6.1e-10, 5.63297960691, 7863.9425107882],\n [6.8e-10, 2.53986117507, 20452.8694122218],\n [5.3e-10, 5.44021645443, 32370.9789915656],\n [5.9e-10, 4.95695131145, 11925.2740926006],\n [5.9e-10, 5.34668243273, 137288.2484348251],\n [5.6e-10, 4.05779957425, 17892.93839400359],\n [5.3e-10, 3.94182462468, 18624.8827542723],\n [4.9e-10, 2.11782803206, 22594.05489571199],\n [6.2e-10, 2.47154086715, 12345.739057544],\n [4.9e-10, 5.7659693738, 18606.4989460002],\n [5.2e-10, 6.20902099741, 21947.1113727],\n [5.1e-10, 3.13287981215, 33326.5787331742],\n [5.7e-10, 6.17003357597, 61306.0115970658],\n [6.4e-10, 5.66596451842, 34596.3646546524],\n [6.6e-10, 3.922623355, 69853.3520756813],\n [5.3e-10, 5.51119362049, 77710.24834977149],\n [5.3e-10, 4.88573986965, 77717.29458646949],\n [4.8e-10, 2.71399112516, 20760.4270331914],\n [4.6e-10, 6.08376164442, 29822.7832363242],\n [5.2e-10, 0.3139748138, 37724.7534197482],\n [4.5e-10, 5.53587248663, 6262.7205305926],\n [5.9e-10, 2.45437896854, 69166.430989505],\n [6e-10, 5.24261569842, 56600.2792895222],\n [5.1e-10, 6.15794342172, 11616.976091013],\n [6e-10, 1.74758109828, 44034.1275895394],\n [4.9e-10, 5.08973141046, 33990.6183442862],\n [4.4e-10, 3.28270864884, 29424.634232916],\n [5.2e-10, 5.34866947943, 28313.288804661],\n [5.9e-10, 2.12384971916, 36173.7081971002],\n [5e-10, 0.46480931695, 25287.7237993998],\n [4.4e-10, 2.0550351721, 63658.8777508376],\n [4.4e-10, 1.71009200258, 13362.4497067992],\n [4.1e-10, 3.91721318316, 6279.1945146334],\n [4.2e-10, 1.52106001448, 23550.34405168259],\n [4.2e-10, 3.10938258068, 84672.47584450469],\n [4.1e-10, 3.78863023321, 35050.00027447539],\n [4.2e-10, 5.57543459263, 38500.2760310722],\n [4e-10, 5.55145719363, 12565.1713789146],\n [5.4e-10, 0.889354921, 50290.905119731],\n [5.5e-10, 2.50268487636, 77828.671313068],\n [5.4e-10, 4.16257918787, 22910.44676536859],\n [4.1e-10, 2.32141215064, 6286.9571853494],\n [4.5e-10, 3.18590576311, 45585.1728121874],\n [4.5e-10, 2.24348941683, 23646.32327890039],\n [4.3e-10, 3.8789211095, 6549.6828917132],\n [4.8e-10, 2.11364139445, 31570.7996493912],\n [4.3e-10, 5.55099558987, 12359.9661515456],\n [4.1e-10, 4.88191569433, 23536.11695768099],\n [4.9e-10, 2.44790922235, 13613.804277336],\n [4.7e-10, 3.5818169391, 4797.0957289262]\n ],\n \"1\": [\n [6283.0758499914, 0, 0],\n [0.00206058863, 2.67823455808, 6283.0758499914],\n [0.00004303419, 2.63512233481, 12566.1516999828],\n [0.00000425264, 1.59046982018, 3.523118349],\n [0.00000109017, 2.96631010675, 1577.3435424478],\n [9.3479e-7, 2.59211109542, 18849.2275499742],\n [0.00000119305, 5.79555765566, 26.2983197998],\n [7.2121e-7, 1.13840581212, 529.6909650946],\n [6.7784e-7, 1.87453300345, 398.1490034082],\n [6.735e-7, 4.40932832004, 5507.5532386674],\n [5.9045e-7, 2.88815790631, 5223.6939198022],\n [5.5976e-7, 2.17471740035, 155.4203994342],\n [4.5411e-7, 0.39799502896, 796.2980068164],\n [3.6298e-7, 0.46875437227, 775.522611324],\n [2.8962e-7, 2.64732254645, 7.1135470008],\n [1.9097e-7, 1.84628376049, 5486.777843175],\n [2.0844e-7, 5.34138275149, 0.9803210682],\n [1.8508e-7, 4.96855179468, 213.299095438],\n [1.6233e-7, 0.03216587315, 2544.3144198834],\n [1.7293e-7, 2.9911676063, 6275.9623029906],\n [1.5832e-7, 1.43049301283, 2146.1654164752],\n [1.4608e-7, 1.2046979369, 10977.078804699],\n [1.1877e-7, 3.25805082007, 5088.6288397668],\n [1.1514e-7, 2.07502080082, 4694.0029547076],\n [9.721e-8, 4.2392586526, 1349.8674096588],\n [9.969e-8, 1.30263423409, 6286.5989683404],\n [9.452e-8, 2.69956827011, 242.728603974],\n [1.2461e-7, 2.83432282119, 1748.016413067],\n [1.1808e-7, 5.27379760438, 1194.4470102246],\n [8.577e-8, 5.6447608598, 951.7184062506],\n [1.0641e-7, 0.76614722966, 553.5694028424],\n [7.576e-8, 5.30056172859, 2352.8661537718],\n [5.764e-8, 1.77228445837, 1059.3819301892],\n [6.385e-8, 2.65034514038, 9437.762934887],\n [5.223e-8, 5.66135782131, 71430.69561812909],\n [5.315e-8, 0.91110018969, 3154.6870848956],\n [6.101e-8, 4.66633726278, 4690.4798363586],\n [4.335e-8, 0.23934560382, 6812.766815086],\n [5.041e-8, 1.42489704722, 6438.4962494256],\n [4.259e-8, 0.77355543889, 10447.3878396044],\n [5.2e-8, 1.85528830215, 801.8209311238],\n [3.744e-8, 2.00119905572, 8031.0922630584],\n [3.553e-8, 2.42789590229, 14143.4952424306],\n [3.372e-8, 3.86210786421, 1592.5960136328],\n [3.38e-8, 0.88545388924, 12036.4607348882],\n [3.196e-8, 3.19713328141, 4705.7323075436],\n [3.221e-8, 0.6160104899, 8429.2412664666],\n [4.132e-8, 5.23992584671, 7084.8967811152],\n [2.97e-8, 6.07029819073, 4292.3308329504],\n [2.9e-8, 2.32464208411, 20.3553193988],\n [3.504e-8, 4.79976712702, 6279.5527316424],\n [2.95e-8, 1.43108874817, 5746.271337896],\n [2.697e-8, 4.80365209201, 7234.794256242],\n [2.531e-8, 6.22289990904, 6836.6452528338],\n [2.745e-8, 0.93466065396, 5760.4984318976],\n [3.25e-8, 3.39951915286, 7632.9432596502],\n [2.278e-8, 5.00339914806, 17789.845619785],\n [2.076e-8, 3.95551309007, 10213.285546211],\n [2.061e-8, 2.2240771919, 5856.4776591154],\n [2.252e-8, 5.67166717686, 11499.6562227928],\n [2.148e-8, 5.20182663314, 11513.8833167944],\n [1.886e-8, 0.53198539077, 3340.6124266998],\n [1.875e-8, 4.73511969924, 83996.84731811189],\n [2.06e-8, 2.54985307819, 25132.3033999656],\n [1.794e-8, 1.47435300254, 4164.311989613],\n [1.778e-8, 3.02473091781, 5.5229243074],\n [2.036e-8, 0.90908165072, 6256.7775301916],\n [2.064e-8, 2.27051326957, 522.5774180938],\n [1.773e-8, 3.03090500693, 5753.3848848968],\n [1.569e-8, 6.12406216872, 5216.5803728014],\n [1.59e-8, 4.63713748247, 3.2863574178],\n [1.533e-8, 4.20305593883, 13367.9726311066],\n [1.427e-8, 1.19087535126, 3894.1818295422],\n [1.376e-8, 4.24955891338, 426.598190876],\n [1.375e-8, 3.09301252193, 135.0650800354],\n [1.308e-8, 3.0849213889, 5643.1785636774],\n [1.34e-8, 5.76513167968, 6040.3472460174],\n [1.25e-8, 3.07748196332, 11926.2544136688],\n [1.551e-8, 3.07664090662, 6681.2248533996],\n [1.148e-8, 3.24144202282, 12168.0026965746],\n [1.268e-8, 2.09201189992, 6290.1893969922],\n [1.248e-8, 3.44506939791, 536.8045120954],\n [1.118e-8, 2.31830078762, 16730.4636895958],\n [1.105e-8, 5.31966001019, 23.8784377478],\n [1.012e-8, 3.74953487087, 7860.4193924392],\n [1.025e-8, 2.4468377161, 1990.745017041],\n [9.62e-9, 0.81771017882, 3.881335358],\n [9.11e-9, 0.41724352112, 7079.3738568078],\n [1.091e-8, 3.98233608618, 11506.7697697936],\n [9.57e-9, 4.07671436153, 6127.6554505572],\n [8.35e-9, 5.28348689371, 11790.6290886588],\n [8.02e-9, 3.88779080089, 10973.55568635],\n [7.73e-9, 2.41044394817, 1589.0728952838],\n [7.58e-9, 1.30034365873, 103.0927742186],\n [7.49e-9, 4.96281442361, 6496.3749454294],\n [7.65e-9, 3.36312388424, 36.0278666774],\n [9.15e-9, 5.41549763095, 206.1855484372],\n [7.76e-9, 2.57589060224, 11371.7046897582],\n [7.72e-9, 3.98363364977, 955.5997416086],\n [7.49e-9, 5.17900231417, 10969.9652576982],\n [8.06e-9, 0.34226117299, 9917.6968745098],\n [7.28e-9, 5.20962563787, 38.0276726358],\n [6.85e-9, 2.77592961854, 20.7753954924],\n [6.36e-9, 4.28242193632, 28.4491874678],\n [6.08e-9, 5.63278510221, 10984.1923516998],\n [7.04e-9, 5.60739437733, 3738.761430108],\n [6.85e-9, 0.38876148682, 15.252471185],\n [6.01e-9, 0.73489602442, 419.4846438752],\n [7.16e-9, 2.65286869987, 6309.3741697912],\n [5.84e-9, 5.54508741381, 17298.1823273262],\n [6.28e-9, 1.11733054796, 7058.5984613154],\n [6.88e-9, 2.59684132401, 3496.032826134],\n [4.85e-9, 0.44470714066, 12352.8526045448],\n [5.62e-9, 2.82510352358, 3930.2096962196],\n [5.97e-9, 5.27675789973, 10575.4066829418],\n [5.83e-9, 3.1893153986, 4732.0306273434],\n [5.26e-9, 5.01737745304, 5884.9268465832],\n [5.4e-9, 1.29182747488, 640.8776073822],\n [4.81e-9, 5.49721461067, 5230.807466803],\n [4.06e-9, 5.21253018484, 220.4126424388],\n [3.95e-9, 1.87489912123, 16200.7727245012],\n [3.67e-9, 0.88533542945, 6283.14316029419],\n [3.69e-9, 3.84778078192, 18073.7049386502],\n [3.79e-9, 0.37991716505, 10177.2576795336],\n [3.56e-9, 3.84152910109, 11712.9553182308],\n [3.74e-9, 5.01577520608, 7.046236698],\n [3.81e-9, 4.30250406634, 6062.6632075526],\n [4.71e-9, 0.86388942467, 6069.7767545534],\n [3.67e-9, 1.3294383993, 6283.0085396886],\n [4.6e-9, 5.19667219582, 6284.0561710596],\n [3.33e-9, 5.54250425107, 4686.8894077068],\n [3.41e-9, 4.36524495363, 7238.6755916],\n [3.36e-9, 4.00205876835, 3097.88382272579],\n [3.59e-9, 6.22679790284, 245.8316462294],\n [3.07e-9, 2.35299010924, 170.6728706192],\n [3.43e-9, 3.77164927142, 6076.8903015542],\n [2.96e-9, 5.44138799494, 17260.1546546904],\n [3.28e-9, 0.13817705132, 11015.1064773348],\n [2.69e-9, 1.13308244952, 12569.6748183318],\n [2.63e-9, 0.0055073751, 4136.9104335162],\n [2.82e-9, 5.04399588559, 7477.522860216],\n [2.8e-9, 3.13703211405, 12559.038152982],\n [2.59e-9, 0.93882269388, 5642.1982426092],\n [2.92e-9, 1.98426314297, 12132.439962106],\n [2.47e-9, 3.84244798673, 5429.8794682394],\n [3.19e-9, 5.0417014879, 90617.7374312997],\n [2.45e-9, 5.70469737024, 65147.6197681377],\n [3.18e-9, 1.35581968834, 78051.5857313169],\n [2.41e-9, 0.99469787369, 3634.6210245184],\n [2.46e-9, 3.06168069393, 110.2063212194],\n [2.39e-9, 6.11854529589, 11856.2186514245],\n [2.67e-9, 0.65297608414, 21228.3920235458],\n [2.62e-9, 1.51070507866, 12146.6670561076],\n [2.3e-9, 1.75923794017, 9779.1086761254],\n [2.23e-9, 2.00967043606, 6172.869528772],\n [2.46e-9, 1.10411690861, 6282.0955289232],\n [2.14e-9, 4.03840492266, 14314.1681130498],\n [2.12e-9, 2.13695623228, 5849.3641121146],\n [2.07e-9, 3.07724246401, 11.729352836],\n [2.07e-9, 6.10303325026, 23543.23050468179],\n [2.66e-9, 1.00720021877, 2388.8940204492],\n [2.17e-9, 6.27840212312, 17267.26820169119],\n [2.31e-9, 5.37372783468, 13916.0191096416],\n [2.04e-9, 2.34615348695, 266.6070417218],\n [1.95e-9, 5.55015549753, 6133.5126528568],\n [2.03e-9, 4.65616806503, 24072.9214697764],\n [1.88e-9, 2.52682282169, 6525.8044539654],\n [1.77e-9, 1.73426919199, 154717.6098876827],\n [1.87e-9, 4.76501318048, 4535.0594369244],\n [1.86e-9, 4.63080493407, 10440.2742926036],\n [1.83e-9, 3.20060840641, 8635.9420037632],\n [1.72e-9, 1.45551703877, 9225.539273283],\n [1.62e-9, 3.30665137166, 639.897286314],\n [1.68e-9, 2.17671416605, 27.4015560968],\n [1.6e-9, 1.6816871275, 15110.4661198662],\n [1.94e-9, 2.79243768345, 7342.4577801806],\n [1.83e-9, 0.56273524797, 13517.8701062334],\n [1.72e-9, 5.97039514134, 4701.1165017084],\n [1.79e-9, 3.58450811616, 87.30820453981],\n [1.52e-9, 2.84070476839, 5650.2921106782],\n [1.56e-9, 1.07156076421, 18319.5365848796],\n [1.82e-9, 0.44053620124, 17253.04110768959],\n [1.42e-9, 1.4629013752, 11087.2851259184],\n [1.31e-9, 5.40912137746, 2699.7348193176],\n [1.44e-9, 2.07312089638, 25158.6017197654],\n [1.47e-9, 6.15107800602, 9623.6882766912],\n [1.41e-9, 5.55739979498, 10454.5013866052],\n [1.35e-9, 0.0609812943, 16723.350142595],\n [1.23e-9, 5.81194797368, 17256.6315363414],\n [1.24e-9, 2.36269386269, 4933.2084403326],\n [1.26e-9, 3.47483886466, 22483.84857449259],\n [1.59e-9, 5.63944722033, 5729.506447149],\n [1.37e-9, 1.93811728826, 20426.571092422],\n [1.23e-9, 3.92815962825, 17996.0311682222],\n [1.48e-9, 3.02542567608, 1551.045222648],\n [1.21e-9, 0.05537321071, 13095.8426650774],\n [1.2e-9, 5.91904349732, 6206.8097787158],\n [1.34e-9, 3.11122937825, 21954.15760939799],\n [1.19e-9, 5.52143897201, 709.9330485583],\n [1.22e-9, 3.00840036775, 19800.9459562248],\n [1.27e-9, 1.37534182407, 14945.3161735544],\n [1.41e-9, 2.56886299638, 1052.2683831884],\n [1.23e-9, 2.83671175442, 11919.140866668],\n [1.18e-9, 0.81918292547, 5331.3574437408],\n [1.51e-9, 2.68728567951, 11769.8536931664],\n [1.19e-9, 5.08654046247, 5481.2549188676],\n [1.13e-9, 4.42675663942, 18422.62935909819],\n [1.53e-9, 2.46021790779, 11933.3679606696],\n [1.08e-9, 1.04936452151, 11403.676995575],\n [1.28e-9, 0.99810456461, 8827.3902698748],\n [1.44e-9, 2.54869747042, 227.476132789],\n [1.5e-9, 4.50631437136, 2379.1644735716],\n [1.09e-9, 0.29269062317, 16737.5772365966],\n [1.22e-9, 4.23040027813, 29.429508536],\n [1.11e-9, 5.16970710025, 17782.7320727842],\n [1.05e-9, 1.61738153441, 13119.72110282519],\n [1e-9, 3.52204690579, 18052.9295431578],\n [1.08e-9, 1.08493117155, 16858.4825329332],\n [1.35e-9, 3.2016061697, 6262.300454499],\n [1.06e-9, 1.96085069786, 74.7815985673],\n [1.29e-9, 4.85949366504, 16496.3613962024],\n [1.1e-9, 2.30605777952, 16460.33352952499],\n [9.7e-10, 3.5091894021, 5333.9002410216],\n [9.9e-10, 3.56417337974, 735.8765135318],\n [9.6e-10, 3.40918487598, 15720.8387848784],\n [9.4e-10, 5.01601027363, 3128.3887650958],\n [9.7e-10, 1.65579893894, 533.2140834436],\n [9.2e-10, 0.89219199493, 29296.6153895786],\n [1.23e-9, 3.16062062663, 9380.9596727172],\n [1.02e-9, 1.20493500565, 23020.65308658799],\n [8.8e-10, 2.21265504437, 12721.572099417],\n [8.9e-10, 1.5432266957, 20199.094959633],\n [1.21e-9, 6.19860353182, 9388.0059094152],\n [8.9e-10, 4.08082274765, 22805.7355659936],\n [9.8e-10, 1.09176668094, 12043.574281889],\n [8.6e-10, 1.13649001466, 143571.32428481648],\n [8.8e-10, 5.96980472191, 107.6635239386],\n [8.2e-10, 5.01561173481, 22003.9146348698],\n [9.4e-10, 1.69615700473, 23006.42599258639],\n [8.1e-10, 3.00664741995, 2118.7638603784],\n [9.8e-10, 1.39215287161, 8662.240323563],\n [8e-10, 5.16340988714, 17796.9591667858],\n [8.2e-10, 5.86893959287, 2787.0430238574],\n [7.7e-10, 0.80723694712, 167283.7615876655],\n [9.1e-10, 5.74902425304, 21424.4666443034],\n [7.6e-10, 5.67183650604, 14.2270940016],\n [8.1e-10, 6.16619455699, 1039.0266107904],\n [7.6e-10, 3.21449884756, 111.1866422876],\n [7.8e-10, 1.37531518377, 21947.1113727],\n [7.4e-10, 3.58814195051, 11609.8625440122],\n [7.7e-10, 4.84846488388, 22743.4093795164],\n [9e-10, 1.48869013606, 15671.0817594066],\n [8.2e-10, 3.48618398216, 29088.811415985],\n [7.1e-10, 2.2159156119, 12029.3471878874],\n [6.9e-10, 1.93625656075, 135.62532501],\n [7e-10, 2.66552760898, 18875.525869774],\n [6.9e-10, 5.41478093731, 26735.9452622132],\n [7.9e-10, 5.15158156951, 12323.4230960088],\n [7.8e-10, 4.17014063638, 1066.49547719],\n [6.5e-10, 5.64584720343, 12139.5535091068],\n [7.1e-10, 3.89804774037, 22779.4372461938],\n [6.3e-10, 4.53968787714, 8982.810669309],\n [7.6e-10, 3.29088891716, 2942.4634232916],\n [6.9e-10, 0.94232113005, 14919.0178537546],\n [6.3e-10, 4.0918653549, 16062.1845261168],\n [6.5e-10, 3.34580407184, 51.28033786241],\n [6.5e-10, 5.75757544877, 52670.0695933026],\n [5.7e-10, 5.25050277534, 20995.3929664494],\n [6.1e-10, 1.92290673861, 6805.6532680852],\n [6.1e-10, 0.08878901558, 13362.4497067992],\n [7.6e-10, 1.86947679415, 25287.7237993998],\n [5.6e-10, 4.25396542622, 6709.6740408674],\n [5.8e-10, 4.79429715781, 6286.3622074092],\n [7.3e-10, 0.53299090807, 2301.58581590939],\n [7e-10, 4.31243357502, 19402.7969528166],\n [6.7e-10, 2.53852336668, 377.3736079158],\n [5.6e-10, 3.20816844695, 24889.5747959916],\n [5.4e-10, 5.17336469511, 26084.0218062162],\n [5.3e-10, 3.17675406016, 18451.07854656599],\n [5.3e-10, 3.61529270216, 77.673770428],\n [5.3e-10, 0.45467549335, 30666.1549584328],\n [5.3e-10, 2.97761644192, 21548.9623692918],\n [6.1e-10, 0.14805728543, 23013.5395395872],\n [5.1e-10, 3.32803972907, 56.8983749356],\n [5.2e-10, 3.41304011355, 23141.5583829246],\n [5.8e-10, 3.13638677202, 309.2783226558],\n [5.4e-10, 1.60896548545, 13341.6743113068],\n [5.3e-10, 5.81426394852, 16193.65917750039],\n [6.7e-10, 6.27917920454, 22345.2603761082],\n [5e-10, 0.42577644151, 25685.872802808],\n [4.8e-10, 0.70204553352, 1162.4747044078],\n [6.6e-10, 3.64350022359, 15265.8865193004],\n [5e-10, 5.7438291744, 19.66976089979],\n [5.4e-10, 1.97277370837, 23581.2581773176],\n [5.1e-10, 1.23713196525, 12539.853380183],\n [4.6e-10, 5.41431704639, 33019.0211122046],\n [4.6e-10, 4.80640843261, 19651.048481098],\n [5e-10, 1.23847511223, 22476.73502749179],\n [5.1e-10, 4.91913434178, 12592.4500197826],\n [4.6e-10, 2.41369976086, 98068.53671630539],\n [4.5e-10, 3.45227074337, 30774.5016425748],\n [4.5e-10, 4.39659083856, 433.7117378768],\n [4.5e-10, 3.71921056816, 18209.33026366019],\n [4.4e-10, 2.47683925106, 24356.7807886416],\n [4.9e-10, 2.17835058609, 13521.7514415914],\n [4.6e-10, 0.26142733448, 11.0457002639],\n [4.5e-10, 2.46230645202, 51868.2486621788],\n [4.3e-10, 4.29458463014, 28230.18722269139],\n [4.8e-10, 0.89551707131, 56600.2792895222],\n [4.2e-10, 3.63410684699, 4590.910180489],\n [4.9e-10, 3.17757670967, 6303.8512454838],\n [4.3e-10, 4.93350349236, 10021.8372800994],\n [5.2e-10, 3.65410195699, 7872.1487452752],\n [4.1e-10, 4.82166756935, 10988.808157535],\n [4e-10, 1.81891629936, 34596.3646546524],\n [4.3e-10, 1.94164978061, 1903.4368125012],\n [4.1e-10, 0.74461854136, 23937.856389741],\n [4.5e-10, 5.4557501753, 60530.4889857418],\n [5e-10, 5.67355640472, 18216.443810661],\n [4e-10, 0.04502010161, 38526.574350872],\n [5.3e-10, 3.64807615995, 11925.2740926006],\n [4.2e-10, 5.19292937193, 19004.6479494084],\n [4.1e-10, 0.94309683296, 9924.8104215106],\n [3.9e-10, 4.61184303844, 95.9792272178],\n [4.9e-10, 2.05532526216, 12573.2652469836],\n [4.5e-10, 3.73717824543, 7875.6718636242],\n [4.3e-10, 1.14078465002, 49.7570254718],\n [3.9e-10, 1.70539366023, 32217.2001810808],\n [3.7e-10, 1.29390383811, 310.8407988684],\n [3.8e-10, 0.9597092595, 664.75604513],\n [3.9e-10, 0.85957361635, 16522.6597160022],\n [4e-10, 1.00170796001, 36949.2308084242],\n [4e-10, 3.78164718776, 55798.4583583984],\n [3.7e-10, 5.42237070904, 6286.6662786432],\n [3.6e-10, 1.68167662194, 10344.2950653858],\n [4e-10, 5.13217319067, 15664.03552270859],\n [4.9e-10, 3.62741283878, 77713.7714681205],\n [4.5e-10, 6.15877872538, 28286.9904848612],\n [3.6e-10, 3.32158458257, 16207.886271502],\n [3.5e-10, 5.83917764292, 6321.1035226272],\n [3.6e-10, 1.80784164083, 6279.7894925736],\n [3.5e-10, 4.60279245362, 28237.2334593894],\n [3.3e-10, 0.47301775923, 18635.9284545362],\n [3.5e-10, 4.36571027474, 48739.859897083],\n [3.1e-10, 3.06828028412, 6819.8803620868],\n [3.1e-10, 2.4020319848, 28628.3362260996],\n [3.4e-10, 1.90096411242, 12964.300703391],\n [2.9e-10, 6.09291010354, 18606.4989460002],\n [2.8e-10, 3.42046112698, 6288.5987742988],\n [2.8e-10, 3.437361406, 34115.1140692746],\n [2.9e-10, 1.48920816078, 6489.2613984286],\n [2.8e-10, 3.07474749886, 29822.7832363242],\n [3.8e-10, 2.44608264663, 31415.379249957],\n [2.8e-10, 2.98392582088, 6277.552925684],\n [2.7e-10, 5.03556015623, 12779.4507954208],\n [2.7e-10, 5.40812977287, 26087.9031415742],\n [3.8e-10, 5.56439937893, 27832.0382192832],\n [2.6e-10, 3.87685883153, 6262.7205305926],\n [2.7e-10, 6.1556539284, 28759.81087748319],\n [2.5e-10, 5.17122153205, 6915.8595893046],\n [2.7e-10, 4.03132006944, 9910.583327509],\n [3.3e-10, 3.97763407373, 12410.7313005486],\n [2.4e-10, 5.31307120044, 29026.48522950779],\n [2.5e-10, 0.81055213297, 36173.7081971002],\n [2.4e-10, 1.2870610131, 24491.4257925834],\n [2.1e-10, 2.02548478742, 28766.924424484],\n [2.1e-10, 6.07545114034, 18139.2945014159],\n [2.2e-10, 2.31199937131, 6303.4311693902],\n [2.3e-10, 1.35235057478, 49515.382508407],\n [2.3e-10, 2.92765926961, 65236.2212932854],\n [1.9e-10, 0.03636659763, 29864.334027309],\n [2e-10, 0.91374066194, 45585.1728121874],\n [2.1e-10, 4.45003013294, 22490.9621214934],\n [2.2e-10, 1.97119365888, 34513.2630726828],\n [2e-10, 4.11682669951, 17157.0618804718],\n [2.4e-10, 1.40243942415, 14712.317116458],\n [2.2e-10, 2.19759737115, 31570.7996493912],\n [2.1e-10, 1.48739821208, 61306.0115970658],\n [2.5e-10, 5.71465573409, 25934.1243310894]\n ],\n \"2\": [\n [0.00008721859, 1.07253635559, 6283.0758499914],\n [0.0000099099, 3.14159265359, 0],\n [0.00000294833, 0.43717350256, 12566.1516999828],\n [2.7338e-7, 0.05295636147, 3.523118349],\n [1.6333e-7, 5.18820215724, 26.2983197998],\n [1.5745e-7, 3.68504712183, 155.4203994342],\n [9.425e-8, 0.29667114694, 18849.2275499742],\n [8.938e-8, 2.05706319592, 77713.7714681205],\n [6.94e-8, 0.82691541038, 775.522611324],\n [5.061e-8, 4.6624323168, 1577.3435424478],\n [4.06e-8, 1.03067032318, 7.1135470008],\n [3.464e-8, 5.14021224609, 796.2980068164],\n [3.172e-8, 6.05479318507, 5507.5532386674],\n [3.02e-8, 1.19240008524, 242.728603974],\n [2.885e-8, 6.11705865396, 529.6909650946],\n [3.809e-8, 3.44043369494, 5573.1428014331],\n [2.719e-8, 0.30363248164, 398.1490034082],\n [2.365e-8, 4.37666117992, 5223.6939198022],\n [2.538e-8, 2.27966434314, 553.5694028424],\n [2.078e-8, 3.75435095487, 0.9803210682],\n [1.675e-8, 0.90149951436, 951.7184062506],\n [1.534e-8, 5.75895831192, 1349.8674096588],\n [1.224e-8, 2.97285792195, 2146.1654164752],\n [1.449e-8, 4.36401639552, 1748.016413067],\n [1.341e-8, 3.72019379666, 1194.4470102246],\n [1.253e-8, 2.9488872631, 6438.4962494256],\n [9.99e-9, 5.98665341008, 6286.5989683404],\n [9.17e-9, 4.79722195184, 5088.6288397668],\n [8.29e-9, 3.31021398862, 213.299095438],\n [1.102e-8, 1.27094359244, 161000.6857376741],\n [7.64e-9, 3.41231607038, 5486.777843175],\n [1.046e-8, 0.60374190029, 3154.6870848956],\n [8.87e-9, 5.23364022595, 7084.8967811152],\n [6.44e-9, 1.59974355582, 2544.3144198834],\n [6.81e-9, 3.42742947469, 4694.0029547076],\n [6.06e-9, 2.47688996663, 10977.078804699],\n [7.06e-9, 6.19369692903, 4690.4798363586],\n [6.43e-9, 1.98119869589, 801.8209311238],\n [5.02e-9, 1.44415463861, 6836.6452528338],\n [4.9e-9, 2.33889753806, 1592.5960136328],\n [4.58e-9, 1.30867922972, 4292.3308329504],\n [4.31e-9, 0.03542536476, 7234.794256242],\n [3.49e-9, 0.98779272263, 6040.3472460174],\n [3.85e-9, 1.57065592218, 71430.69561812909],\n [3.71e-9, 3.16149051601, 6309.3741697912],\n [3.48e-9, 0.64980950594, 1059.3819301892],\n [4.58e-9, 3.81505682017, 149854.4001348079],\n [3.02e-9, 1.91723873447, 10447.3878396044],\n [3.06e-9, 3.55405857884, 8031.0922630584],\n [3.95e-9, 4.93742673052, 7632.9432596502],\n [3.14e-9, 3.18058352846, 2352.8661537718],\n [2.81e-9, 4.41751404023, 9437.762934887],\n [2.76e-9, 2.71075791682, 3894.1818295422],\n [2.98e-9, 2.52045757001, 6127.6554505572],\n [2.72e-9, 0.24370191144, 25132.3033999656],\n [2.51e-9, 0.55449375765, 6279.5527316424],\n [2.24e-9, 1.40790249012, 4705.7323075436],\n [2.58e-9, 5.29510765044, 6812.766815086],\n [1.78e-9, 0.92636669742, 1990.745017041],\n [2.17e-9, 0.68543630022, 6256.7775301916],\n [1.54e-9, 0.77808632062, 14143.4952424306],\n [1.5e-9, 2.40636982736, 426.598190876],\n [1.96e-9, 6.06877865012, 640.8776073822],\n [1.37e-9, 2.21947617717, 8429.2412664666],\n [1.27e-9, 5.47380312768, 12036.4607348882],\n [1.21e-9, 3.32740512021, 17789.845619785],\n [1.23e-9, 2.16004509785, 10213.285546211],\n [1.16e-9, 0.49705139709, 7058.5984613154],\n [1.38e-9, 2.36181661472, 11506.7697697936],\n [1.01e-9, 0.86299995919, 6290.1893969922],\n [1.18e-9, 5.82317768355, 7860.4193924392],\n [9.2e-10, 5.11639978593, 7079.3738568078],\n [1.25e-9, 2.65424538513, 88860.05707098669],\n [8.8e-10, 4.3118823616, 83996.84731811189],\n [8.4e-10, 3.57682769713, 16730.4636895958],\n [9.7e-10, 5.58011309774, 13367.9726311066],\n [1.02e-9, 2.05853060226, 87.30820453981],\n [8e-10, 4.73827128421, 11926.2544136688],\n [8e-10, 5.41344057121, 10973.55568635],\n [1.06e-9, 4.10978997399, 3496.032826134],\n [7.5e-10, 4.89166898876, 5643.1785636774],\n [1e-9, 3.62645659087, 244287.60000722768],\n [9.6e-10, 1.39443577787, 6681.2248533996],\n [6.9e-10, 1.88399189965, 10177.2576795336],\n [8.7e-10, 0.40842153208, 11015.1064773348],\n [6.6e-10, 0.99444831932, 6525.8044539654],\n [6.6e-10, 1.42471816453, 9917.6968745098],\n [6.7e-10, 5.5124099707, 3097.88382272579],\n [7.6e-10, 2.7156469351, 4164.311989613],\n [8.5e-10, 0.4965552367, 10575.4066829418],\n [7.7e-10, 3.51693861509, 11856.2186514245],\n [6.2e-10, 3.6258762869, 16496.3613962024],\n [5.4e-10, 5.25957420065, 3340.6124266998],\n [5.3e-10, 1.10902178415, 8635.9420037632],\n [4.9e-10, 5.65761054625, 20426.571092422],\n [6.4e-10, 5.79211164779, 2388.8940204492],\n [4.6e-10, 5.45092696155, 6275.9623029906],\n [5.7e-10, 4.97077155798, 14945.3161735544],\n [4.3e-10, 3.30685683359, 9779.1086761254],\n [4.2e-10, 1.61412785248, 12168.0026965746],\n [4.9e-10, 3.92715473768, 5729.506447149],\n [4.2e-10, 0.6348125893, 2699.7348193176],\n [5.6e-10, 4.34038639086, 90955.5516944961],\n [4e-10, 5.66871428338, 11712.9553182308],\n [3.9e-10, 3.10911294009, 16200.7727245012],\n [4e-10, 5.71338386146, 709.9330485583],\n [5.3e-10, 6.17067257683, 233141.3144043615],\n [3.7e-10, 0.32095173508, 24356.7807886416],\n [3.5e-10, 0.95557073457, 17298.1823273262],\n [3.5e-10, 0.64913397996, 25158.6017197654],\n [4.1e-10, 1.53850422484, 65147.6197681377],\n [3.5e-10, 0.77655626359, 13916.0191096416],\n [3.1e-10, 5.35897350775, 5331.3574437408],\n [3e-10, 4.48114682755, 23543.23050468179],\n [3.2e-10, 3.45976963453, 7477.522860216],\n [2.9e-10, 3.46648040769, 13119.72110282519],\n [3.8e-10, 2.90863974625, 12721.572099417],\n [2.9e-10, 3.13390968321, 4136.9104335162],\n [3.5e-10, 3.79717126309, 143571.32428481648],\n [2.7e-10, 0.95726093828, 12559.038152982],\n [2.6e-10, 4.9532687703, 5753.3848848968],\n [3.2e-10, 3.49943896928, 6284.0561710596],\n [2.6e-10, 4.59276256636, 5884.9268465832],\n [2.6e-10, 1.53958920253, 154717.6098876827],\n [2.3e-10, 4.88012908735, 13095.8426650774],\n [2.3e-10, 0.35935706511, 31415.379249957],\n [2.4e-10, 5.11515116629, 18319.5365848796],\n [2.1e-10, 5.73872879912, 12569.6748183318],\n [2.1e-10, 1.32901200081, 10988.808157535],\n [1.9e-10, 2.24263229491, 18073.7049386502],\n [1.9e-10, 3.14253175605, 6496.3749454294],\n [2.1e-10, 2.80122025076, 6282.0955289232],\n [2.3e-10, 0.14288760398, 6283.0085396886],\n [1.9e-10, 4.28209473754, 3930.2096962196],\n [1.6e-10, 0.25933207663, 11790.6290886588],\n [1.5e-10, 6.0962350124, 13517.8701062334],\n [2e-10, 5.06358906224, 6283.14316029419],\n [1.5e-10, 1.0768066315, 4933.2084403326],\n [1.9e-10, 5.74000581249, 3128.3887650958],\n [1.6e-10, 6.18924226747, 7342.4577801806],\n [1.3e-10, 1.69105044945, 4535.0594369244],\n [1.5e-10, 3.36968394452, 17260.1546546904],\n [1e-10, 3.78885035015, 22003.9146348698],\n [1.1e-10, 2.12851973876, 7875.6718636242]\n ],\n \"3\": [\n [0.00000289058, 5.84173149732, 6283.0758499914],\n [2.0712e-7, 6.0498393902, 12566.1516999828],\n [2.962e-8, 5.1956057957, 155.4203994342],\n [2.527e-8, 3.14159265359, 0],\n [1.288e-8, 4.7219761197, 3.523118349],\n [6.35e-9, 5.96904899168, 242.728603974],\n [5.7e-9, 5.54182903238, 18849.2275499742],\n [4.02e-9, 3.78606612895, 553.5694028424],\n [7.2e-10, 4.37131884946, 6286.5989683404],\n [6.7e-10, 0.91133898967, 6127.6554505572],\n [3.7e-10, 5.28611190997, 6438.4962494256],\n [2.1e-10, 2.94917211527, 6309.3741697912],\n [1.5e-10, 3.63037493932, 71430.69561812909],\n [1.1e-10, 4.83261533939, 25132.3033999656],\n [1.1e-10, 5.84259014283, 6525.8044539654],\n [1.2e-10, 3.82296977522, 7058.5984613154],\n [1.3e-10, 2.39991715131, 5729.506447149],\n [8e-11, 0.55390332094, 6040.3472460174],\n [8e-11, 1.46298993048, 11856.2186514245],\n [8e-11, 5.07535888338, 6256.7775301916],\n [6e-11, 2.88803526743, 5507.5532386674],\n [5e-11, 3.87019253131, 12036.4607348882],\n [5e-11, 2.70838853362, 83996.84731811189]\n ],\n \"4\": [\n [7.714e-8, 4.14117321449, 6283.0758499914],\n [1.016e-8, 3.27573644241, 12566.1516999828],\n [4.2e-9, 0.41892851415, 155.4203994342],\n [4.7e-10, 3.50591071186, 18849.2275499742],\n [4.1e-10, 3.14032562331, 3.523118349],\n [3.5e-10, 5.0111077, 5573.1428014331],\n [1e-10, 5.64816633449, 6127.6554505572],\n [1.3e-10, 0.48609240774, 77713.7714681205],\n [7e-11, 2.84139222289, 161000.6857376741],\n [4e-11, 3.6550904707, 25132.3033999656],\n [2e-11, 0.54880603487, 6438.4962494256]\n ],\n \"5\": [\n [1.72e-9, 2.74854172392, 6283.0758499914],\n [5e-10, 2.01352986713, 155.4203994342],\n [2.8e-10, 2.93369985477, 12566.1516999828],\n [5e-11, 1.93829214518, 18849.2275499742]\n ]\n },\n B: {\n \"0\": [\n [0.0000027962, 3.19870156017, 84334.66158130829],\n [0.00000101643, 5.42248619256, 5507.5532386674],\n [8.0445e-7, 3.88013204458, 5223.6939198022],\n [4.3806e-7, 3.70444689759, 2352.8661537718],\n [3.1933e-7, 4.00026369781, 1577.3435424478],\n [2.2724e-7, 3.9847383156, 1047.7473117547],\n [1.6392e-7, 3.56456119782, 5856.4776591154],\n [1.8141e-7, 4.98367470262, 6283.0758499914],\n [1.4443e-7, 3.70275614915, 9437.762934887],\n [1.4304e-7, 3.41117857526, 10213.285546211],\n [1.1246e-7, 4.82820690527, 14143.4952424306],\n [1.09e-7, 2.08574562329, 6812.766815086],\n [9.714e-8, 3.47303947751, 4694.0029547076],\n [1.0367e-7, 4.05663927945, 71092.88135493269],\n [8.775e-8, 4.44016515666, 5753.3848848968],\n [8.366e-8, 4.99251512183, 7084.8967811152],\n [6.921e-8, 4.32559054073, 6275.9623029906],\n [9.145e-8, 1.14182646613, 6620.8901131878],\n [7.194e-8, 3.60193205744, 529.6909650946],\n [7.698e-8, 5.55425745881, 167621.5758508619],\n [5.285e-8, 2.48446991536, 4705.7323075436],\n [5.208e-8, 6.24992674532, 18073.7049386502],\n [4.529e-8, 2.33827747356, 6309.3741697912],\n [5.579e-8, 4.41023653719, 7860.4193924392],\n [4.743e-8, 0.70995680136, 5884.9268465832],\n [4.301e-8, 1.10255777773, 6681.2248533996],\n [3.849e-8, 1.82229412532, 5486.777843175],\n [4.093e-8, 5.11700141197, 13367.9726311066],\n [3.681e-8, 0.43793170336, 3154.6870848956],\n [3.42e-8, 5.42034800952, 6069.7767545534],\n [3.617e-8, 6.04641937568, 3930.2096962196],\n [3.67e-8, 4.58210192227, 12194.0329146209],\n [2.918e-8, 1.95463881136, 10977.078804699],\n [2.797e-8, 5.61259274877, 11790.6290886588],\n [2.502e-8, 0.60499729368, 6496.3749454294],\n [2.319e-8, 5.01648216088, 1059.3819301892],\n [2.684e-8, 1.39470396487, 22003.9146348698],\n [2.428e-8, 3.24183056545, 78051.5857313169],\n [2.12e-8, 4.30691000285, 5643.1785636774],\n [2.257e-8, 3.15557225087, 90617.7374312997],\n [1.813e-8, 3.75574218286, 3340.6124266998],\n [2.226e-8, 2.79699346673, 12036.4607348882],\n [1.888e-8, 0.86991545944, 8635.9420037632],\n [1.517e-8, 1.9585205571, 398.1490034082],\n [1.581e-8, 3.19976230948, 5088.6288397668],\n [1.421e-8, 6.25530883828, 2544.3144198834],\n [1.595e-8, 0.25619915132, 17298.1823273262],\n [1.391e-8, 4.69964175574, 7058.5984613154],\n [1.478e-8, 2.81808207569, 25934.1243310894],\n [1.481e-8, 3.6582355461, 11506.7697697936],\n [1.693e-8, 4.95689385293, 156475.2902479957],\n [1.183e-8, 1.29343060777, 775.522611324],\n [1.114e-8, 2.37889311847, 3738.761430108],\n [9.94e-9, 4.30088900425, 9225.539273283],\n [9.24e-9, 3.06451026809, 4164.311989613],\n [8.67e-9, 0.55606931068, 8429.2412664666],\n [9.88e-9, 5.97286104208, 7079.3738568078],\n [8.24e-9, 1.50984806177, 10447.3878396044],\n [9.15e-9, 0.12635654605, 11015.1064773348],\n [7.42e-9, 1.99159139281, 26087.9031415742],\n [1.039e-8, 3.14159265359, 0],\n [8.5e-9, 4.24120016095, 29864.334027309],\n [7.55e-9, 2.89631873314, 4732.0306273434],\n [7.14e-9, 1.37548118605, 2146.1654164752],\n [7.08e-9, 1.91406542362, 8031.0922630584],\n [7.46e-9, 0.57893808622, 796.2980068164],\n [8.02e-9, 5.12339137235, 2942.4634232916],\n [7.51e-9, 1.67479850166, 21228.3920235458],\n [6.02e-9, 4.099765389, 64809.80550494129],\n [5.94e-9, 3.49580704849, 16496.3613962024],\n [5.92e-9, 4.59481504319, 4690.4798363586],\n [5.3e-9, 5.73979295194, 8827.3902698748],\n [5.03e-9, 5.66433137112, 33794.5437235286],\n [4.83e-9, 1.57106522322, 801.8209311238],\n [4.38e-9, 0.0670773372, 3128.3887650958],\n [4.23e-9, 2.86944596145, 12566.1516999828],\n [5.04e-9, 3.2620766916, 7632.9432596502],\n [5.52e-9, 1.02926440457, 239762.20451754928],\n [4.27e-9, 3.67434378208, 213.299095438],\n [4.04e-9, 1.4619329736, 15720.8387848784],\n [5.03e-9, 4.85802444134, 6290.1893969922],\n [4.17e-9, 0.81920713533, 5216.5803728014],\n [3.65e-9, 0.01002966145, 12168.0026965746],\n [3.63e-9, 1.28376436579, 6206.8097787158],\n [3.53e-9, 4.7005913311, 7234.794256242],\n [4.15e-9, 0.96862624176, 4136.9104335162],\n [3.87e-9, 3.09145061418, 25158.6017197654],\n [3.73e-9, 2.65119262808, 7342.4577801806],\n [3.61e-9, 2.97762937735, 9623.6882766912],\n [4.18e-9, 3.75759994446, 5230.807466803],\n [3.96e-9, 1.22507712354, 6438.4962494256],\n [3.22e-9, 1.21162178805, 8662.240323563],\n [2.84e-9, 5.64170320179, 1589.0728952838],\n [3.79e-9, 1.72248432756, 14945.3161735544],\n [3.2e-9, 3.94161159658, 7330.8231617461],\n [3.13e-9, 5.47602376451, 1194.4470102246],\n [2.92e-9, 1.38971327568, 11769.8536931664],\n [3.05e-9, 0.80429352049, 37724.7534197482],\n [2.57e-9, 5.81382810029, 426.598190876],\n [2.65e-9, 6.10358507671, 6836.6452528338],\n [2.5e-9, 4.56452895547, 7477.522860216],\n [2.66e-9, 2.62926282354, 7238.6755916],\n [2.63e-9, 6.22089501237, 6133.5126528568],\n [3.06e-9, 2.79682380532, 1748.016413067],\n [2.36e-9, 2.46093023707, 11371.7046897582],\n [3.16e-9, 1.62662805006, 250908.4901204155],\n [2.16e-9, 3.68721275185, 5849.3641121146],\n [2.3e-9, 0.36165162947, 5863.5912061162],\n [2.33e-9, 5.03509933618, 20426.571092422],\n [2e-9, 5.86073159059, 4535.0594369244],\n [2.77e-9, 4.65400292395, 82239.1669577989],\n [2.09e-9, 3.72323200803, 10973.55568635],\n [1.99e-9, 5.05186622555, 5429.8794682394],\n [2.56e-9, 2.40923279886, 19651.048481098],\n [2.1e-9, 4.50691909144, 29088.811415985],\n [1.81e-9, 6.00294783127, 4292.3308329504],\n [2.49e-9, 0.12900984422, 154379.7956244863],\n [2.09e-9, 3.87759458541, 17789.845619785],\n [2.25e-9, 3.18339652605, 18875.525869774],\n [1.91e-9, 4.53897489216, 18477.1087646123],\n [1.72e-9, 2.0969418273, 13095.8426650774],\n [1.82e-9, 3.16107943487, 16730.4636895958],\n [1.88e-9, 2.22746128596, 41654.9631159678],\n [1.64e-9, 5.18686274999, 5481.2549188676],\n [1.6e-9, 2.4929885502, 12592.4500197826],\n [1.55e-9, 1.59595438224, 10021.8372800994],\n [1.35e-9, 0.21349051305, 10988.808157535],\n [1.78e-9, 3.80375178044, 23581.2581773176],\n [1.23e-9, 1.66800739151, 15110.4661198662],\n [1.22e-9, 2.72678272224, 18849.2275499742],\n [1.26e-9, 1.17675512872, 14919.0178537546],\n [1.42e-9, 3.95053440992, 337.8142631964],\n [1.16e-9, 6.06340906212, 6709.6740408674],\n [1.37e-9, 3.52143246244, 12139.5535091068],\n [1.36e-9, 2.92179113491, 32217.2001810808],\n [1.1e-9, 3.51203379263, 18052.9295431578],\n [1.47e-9, 4.63371971408, 22805.7355659936],\n [1.08e-9, 5.45280815225, 7.1135470008],\n [1.48e-9, 0.65447253687, 95480.9471841745],\n [1.19e-9, 5.92110458985, 33019.0211122046],\n [1.1e-9, 5.34824206403, 639.897286314],\n [1.06e-9, 3.71081682614, 14314.1681130498],\n [1.39e-9, 6.17607198262, 24356.7807886416],\n [1.18e-9, 5.59738712949, 161338.5000008705],\n [1.17e-9, 3.6506527164, 45585.1728121874],\n [1.27e-9, 4.74596574209, 49515.382508407],\n [1.2e-9, 1.04211499785, 6915.8595893046],\n [1.2e-9, 5.60638811846, 5650.2921106782],\n [1.15e-9, 3.10668213303, 14712.317116458],\n [9.9e-10, 0.6901893993, 12779.4507954208],\n [9.7e-10, 1.07908724794, 9917.6968745098],\n [9.3e-10, 2.62295197146, 17260.1546546904],\n [9.9e-10, 4.45774681732, 4933.2084403326],\n [1.23e-9, 1.37488921994, 28286.9904848612],\n [1.21e-9, 5.19767249869, 27511.4678735372],\n [1.05e-9, 0.87192268229, 77375.95720492408],\n [8.7e-10, 3.9363781295, 17654.7805397496],\n [1.22e-9, 2.2395606868, 83997.09113559539],\n [8.7e-10, 4.18201600921, 22779.4372461938],\n [1.04e-9, 4.59580877285, 1349.8674096588],\n [1.02e-9, 2.83545248595, 12352.8526045448],\n [1.02e-9, 3.97386522171, 10818.1352869158],\n [1.01e-9, 4.32892825818, 36147.4098773004],\n [9.4e-10, 5.00001709338, 150192.2143980043],\n [7.7e-10, 3.971993693, 1592.5960136328],\n [1e-9, 6.07733097102, 26735.9452622132],\n [8.6e-10, 5.2602963825, 28313.288804661],\n [9.3e-10, 4.31900620254, 44809.6502008634],\n [7.6e-10, 6.22743405935, 13521.7514415914],\n [7.2e-10, 1.55820597747, 6256.7775301916],\n [8.2e-10, 4.95202664555, 10575.4066829418],\n [8.2e-10, 1.69647647075, 1990.745017041],\n [7.5e-10, 2.29836095644, 3634.6210245184],\n [7.5e-10, 2.66367876557, 16200.7727245012],\n [8.7e-10, 0.26630214764, 31441.6775697568],\n [7.7e-10, 2.25530952876, 5235.3285382367],\n [7.6e-10, 1.09869730334, 12903.9659631792],\n [5.8e-10, 4.28246137794, 12559.038152982],\n [6.4e-10, 5.51112829602, 173904.65170085328],\n [5.6e-10, 2.60133794851, 73188.3759784421],\n [5.5e-10, 5.81483150022, 143233.51002162008],\n [5.4e-10, 3.38482031504, 323049.11878710287],\n [3.9e-10, 3.28500401937, 71768.50988132549],\n [3.9e-10, 3.11239910096, 96900.81328129109]\n ],\n \"1\": [\n [0.00227777722, 3.4137662053, 6283.0758499914],\n [0.00003805678, 3.37063423795, 12566.1516999828],\n [0.00003619589, 0, 0],\n [7.1542e-7, 3.32777549735, 18849.2275499742],\n [7.655e-8, 1.79489607186, 5223.6939198022],\n [8.107e-8, 3.89190403643, 5507.5532386674],\n [6.456e-8, 5.1978942475, 2352.8661537718],\n [3.894e-8, 2.15568517178, 6279.5527316424],\n [3.892e-8, 1.53021064904, 6286.5989683404],\n [3.897e-8, 4.87293945629, 10213.285546211],\n [3.812e-8, 1.43523182316, 12036.4607348882],\n [3.577e-8, 2.32913869227, 83996.84731811189],\n [3.57e-8, 4.92637739003, 71430.69561812909],\n [3.494e-8, 2.20864641831, 529.6909650946],\n [2.421e-8, 6.22876183393, 7860.4193924392],\n [2.056e-8, 3.06747139741, 14143.4952424306],\n [1.399e-8, 0.50107877909, 6309.3741697912],\n [1.417e-8, 3.28454570977, 25132.3033999656],\n [1.544e-8, 1.82062047625, 5856.4776591154],\n [1.457e-8, 1.75339303307, 5884.9268465832],\n [1.497e-8, 2.19673914456, 9437.762934887],\n [1.549e-8, 5.73650061398, 17789.845619785],\n [1.277e-8, 3.9672171733, 4705.7323075436],\n [1.038e-8, 2.9481870117, 6256.7775301916],\n [1.018e-8, 2.24114547164, 6681.2248533996],\n [1.021e-8, 1.4679502613, 11790.6290886588],\n [9.16e-9, 3.72965830745, 1059.3819301892],\n [1.156e-8, 6.04591336669, 398.1490034082],\n [1.24e-8, 0.77195902957, 6812.766815086],\n [1.115e-8, 3.92255876225, 12168.0026965746],\n [9.08e-9, 1.78447918237, 3930.2096962196],\n [8.33e-9, 0.09941579828, 11506.7697697936],\n [7.9e-9, 2.45555993228, 775.522611324],\n [6.66e-9, 4.40761401665, 5753.3848848968],\n [5.2e-9, 1.60179602491, 4694.0029547076],\n [3.82e-9, 0.26754532042, 1577.3435424478],\n [4.05e-9, 1.97558286872, 6283.0085396886],\n [4.05e-9, 1.53147989887, 6283.14316029419],\n [3.88e-9, 2.59563818411, 7058.5984613154],\n [3.41e-9, 3.61275156842, 13367.9726311066],\n [2.8e-9, 4.63052251735, 796.2980068164],\n [2.76e-9, 0.43350778219, 7079.3738568078],\n [3.11e-9, 5.28219636656, 17260.1546546904],\n [2.75e-9, 5.27597553634, 11769.8536931664],\n [2.86e-9, 2.98639716345, 6275.9623029906],\n [2.51e-9, 2.81315684448, 6290.1893969922],\n [2.39e-9, 5.77837903893, 10977.078804699],\n [2.28e-9, 0.14375973844, 3738.761430108],\n [2.27e-9, 2.51020991853, 7084.8967811152],\n [2.11e-9, 4.7202946547, 6496.3749454294],\n [2.34e-9, 3.1153527401, 709.9330485583],\n [2.34e-9, 0.5707581762, 11856.2186514245],\n [2.37e-9, 2.38791907394, 213.299095438],\n [2.27e-9, 1.12059781634, 12352.8526045448],\n [1.69e-9, 3.20148089605, 5486.777843175],\n [1.59e-9, 3.14604135756, 8827.3902698748],\n [1.6e-9, 1.14784478002, 5643.1785636774],\n [1.44e-9, 5.23285657431, 78051.5857313169],\n [1.44e-9, 1.16454654602, 90617.7374312997],\n [1.44e-9, 3.81203756929, 6262.300454499],\n [1.43e-9, 5.97809021355, 6303.8512454838],\n [1.38e-9, 4.29829933273, 1589.0728952838],\n [1.61e-9, 3.03298851492, 20426.571092422],\n [1.65e-9, 5.09134896587, 17298.1823273262],\n [1.28e-9, 4.41590143012, 6127.6554505572],\n [1.58e-9, 2.00984506334, 5230.807466803],\n [1.3e-9, 1.44170683802, 12569.6748183318],\n [1.25e-9, 1.69950379498, 3128.3887650958],\n [1.52e-9, 4.96946111415, 65147.6197681377],\n [1.31e-9, 4.24961399629, 6282.0955289232],\n [1.31e-9, 5.54051222995, 6284.0561710596],\n [1.61e-9, 3.32421999691, 6283.3196674749],\n [1.23e-9, 2.93221463795, 15720.8387848784],\n [1.52e-9, 1.56488157456, 18319.5365848796],\n [1.14e-9, 1.89110005546, 18073.7049386502],\n [1.13e-9, 4.95214866677, 4136.9104335162],\n [1.11e-9, 4.79699611405, 8429.2412664666],\n [1.18e-9, 3.06184958762, 22003.9146348698],\n [1.28e-9, 2.09693027395, 12562.6285816338],\n [1.38e-9, 0.84648544836, 6069.7767545534],\n [1e-9, 0.41938790104, 5481.2549188676],\n [1.01e-9, 4.43791289246, 19651.048481098],\n [1.16e-9, 1.87002428935, 77713.7714681205],\n [9.5e-10, 0.68638183645, 3340.6124266998],\n [1.04e-9, 4.90822646457, 8635.9420037632],\n [1.14e-9, 0.36008214928, 23543.23050468179],\n [9.1e-10, 1.1761121931, 9225.539273283],\n [9.1e-10, 2.74682631104, 5216.5803728014],\n [8.6e-10, 3.09315282195, 1194.4470102246],\n [9.3e-10, 6.2764351319, 12559.038152982],\n [8.7e-10, 3.64926989547, 7.1135470008],\n [8.3e-10, 0.37008971174, 11371.7046897582],\n [9.8e-10, 4.68473306376, 167283.7615876655],\n [9.8e-10, 0.99865886857, 154717.6098876827],\n [8.6e-10, 4.41152307486, 25934.1243310894],\n [9.8e-10, 4.98209568932, 16496.3613962024],\n [8.5e-10, 2.35438163823, 3154.6870848956],\n [8.3e-10, 0.24859477658, 21228.3920235458],\n [7.6e-10, 5.46661600296, 29864.334027309],\n [6.9e-10, 3.22045334237, 801.8209311238],\n [6.8e-10, 2.19928242745, 37724.7534197482],\n [7e-10, 5.33711014698, 2544.3144198834],\n [5.5e-10, 5.37872238211, 11015.1064773348],\n [5.1e-10, 5.03600618727, 5863.5912061162],\n [5.9e-10, 3.54984809612, 4535.0594369244],\n [5.3e-10, 1.50812064137, 7342.4577801806],\n [4.4e-10, 1.33712241647, 4164.311989613],\n [5.5e-10, 5.38460045253, 7477.522860216],\n [4.9e-10, 5.61844340512, 24072.9214697764],\n [5.7e-10, 6.17973522898, 8031.0922630584],\n [5.2e-10, 4.24379064407, 5088.6288397668],\n [4.1e-10, 3.41960196246, 26087.9031415742],\n [5.2e-10, 1.68150981131, 25158.6017197654],\n [5.3e-10, 0.11041408311, 29088.811415985],\n [4.3e-10, 0.53354396923, 2146.1654164752],\n [5e-10, 0.60270799844, 33794.5437235286],\n [4.5e-10, 1.69577010458, 6702.5604938666],\n [3.7e-10, 6.09033460795, 64809.80550494129],\n [4.4e-10, 2.67993061247, 15110.4661198662],\n [4.7e-10, 3.62555676035, 41654.9631159678],\n [3.6e-10, 0.47219666269, 13095.8426650774],\n [3.5e-10, 5.99520523215, 23581.2581773176],\n [4.3e-10, 4.08726331262, 156137.47598479927],\n [4.3e-10, 5.17376496602, 18422.62935909819],\n [3.4e-10, 2.14460100274, 4933.2084403326],\n [3e-10, 4.12992793541, 426.598190876],\n [3.6e-10, 2.28596930002, 90279.92316810328],\n [3.2e-10, 0.81117747619, 26.2983197998],\n [2.8e-10, 4.07036560467, 14712.317116458],\n [2.5e-10, 1.92905243842, 1748.016413067],\n [2.4e-10, 5.06152880842, 16730.4636895958],\n [2.3e-10, 3.24047012195, 31415.379249957],\n [2.7e-10, 3.90672018305, 18451.07854656599],\n [2.1e-10, 3.51419811826, 10447.3878396044]\n ],\n \"2\": [\n [0.00009721424, 5.1519280992, 6283.0758499914],\n [0.00000233002, 3.14159265359, 0],\n [0.00000134188, 0.64406212977, 12566.1516999828],\n [6.504e-8, 1.07333397797, 18849.2275499742],\n [1.662e-8, 1.62746869551, 84334.66158130829],\n [6.35e-9, 3.51985338656, 6279.5527316424],\n [4.92e-9, 2.41382223971, 1047.7473117547],\n [3.07e-9, 6.10181422085, 5223.6939198022],\n [3.22e-9, 0.37660897389, 6286.5989683404],\n [3.26e-9, 2.35727931602, 5507.5532386674],\n [2.74e-9, 1.65307581765, 7860.4193924392],\n [2.28e-9, 1.14082932988, 25132.3033999656],\n [2.02e-9, 0.4983668253, 2352.8661537718],\n [2.01e-9, 0.155527656, 10213.285546211],\n [1.67e-9, 3.98005254015, 529.6909650946],\n [1.7e-9, 5.28668290523, 6256.7775301916],\n [1.66e-9, 3.04613930284, 12036.4607348882],\n [1.53e-9, 4.06779216239, 83996.84731811189],\n [1.5e-9, 3.18772213951, 71430.69561812909],\n [1.2e-9, 3.13558669517, 5884.9268465832],\n [1.23e-9, 4.17102530625, 6309.3741697912],\n [1e-9, 1.46356761368, 11506.7697697936],\n [1e-9, 3.00322421365, 11790.6290886588],\n [7.7e-10, 1.65643898948, 4705.7323075436],\n [6.8e-10, 6.03791904123, 6812.766815086],\n [7.5e-10, 4.85191600582, 14143.4952424306],\n [7.9e-10, 4.12628805658, 5753.3848848968],\n [6.4e-10, 2.7194416046, 6127.6554505572],\n [6.3e-10, 0.78655326011, 6438.4962494256],\n [7.5e-10, 0.84213523741, 167621.5758508619],\n [5.1e-10, 4.55059044701, 5486.777843175],\n [5e-10, 5.29314320585, 7079.3738568078],\n [4.5e-10, 0.33147576416, 775.522611324],\n [4.3e-10, 3.6179371164, 1577.3435424478],\n [5.7e-10, 6.15295833679, 12194.0329146209],\n [4.5e-10, 1.18274698508, 17789.845619785],\n [4.7e-10, 1.11643162773, 398.1490034082],\n [4.7e-10, 5.5298423843, 12168.0026965746],\n [4.2e-10, 2.6437530062, 10988.808157535],\n [3.7e-10, 0.31226891972, 6681.2248533996],\n [4.6e-10, 3.38617099014, 156475.2902479957],\n [3.3e-10, 1.26266496002, 6290.1893969922],\n [3.3e-10, 2.25067065498, 6275.9623029906],\n [2.7e-10, 1.72859626293, 1059.3819301892],\n [2.8e-10, 2.88681054153, 796.2980068164],\n [3e-10, 5.52021264181, 7058.5984613154],\n [2.1e-10, 6.22275008403, 6069.7767545534],\n [2.4e-10, 5.83690442827, 6282.0955289232],\n [2.4e-10, 3.95322179797, 6284.0561710596],\n [2.1e-10, 4.87022458966, 3738.761430108],\n [2.1e-10, 3.58048145762, 6496.3749454294],\n [2.2e-10, 1.97770318395, 7.1135470008],\n [1.9e-10, 3.4597988877, 4136.9104335162],\n [1.5e-10, 2.81379880771, 1589.0728952838],\n [1.5e-10, 1.61313151838, 1194.4470102246],\n [1.5e-10, 0.63083434831, 11769.8536931664],\n [1.9e-10, 0.28082047767, 17260.1546546904],\n [1.7e-10, 1.35165136146, 78051.5857313169],\n [1.5e-10, 2.3094159956, 11856.2186514245],\n [1.2e-10, 1.12997370513, 90617.7374312997],\n [1.2e-10, 0.00611601597, 18073.7049386502],\n [1.2e-10, 1.70058636365, 12559.038152982]\n ],\n \"3\": [\n [0.00000275993, 0.59480097092, 6283.0758499914],\n [1.7034e-7, 3.14159265359, 0],\n [3.617e-8, 0.11750575325, 12566.1516999828],\n [3.39e-9, 5.66087461682, 18849.2275499742],\n [5.6e-10, 5.02765554835, 6279.5527316424],\n [1.9e-10, 5.99007646261, 6256.7775301916],\n [1.8e-10, 3.80004734567, 6309.3741697912],\n [1.8e-10, 1.21049250774, 6127.6554505572],\n [1.8e-10, 2.29734567137, 6438.4962494256],\n [1.5e-10, 4.72881467263, 6286.5989683404],\n [1.2e-10, 0.41481671808, 83996.84731811189],\n [1.3e-10, 5.54637369296, 25132.3033999656],\n [1e-10, 2.91937214232, 71430.69561812909],\n [6e-11, 2.1417324121, 11856.2186514245]\n ],\n \"4\": [\n [5.745e-8, 2.26734029843, 6283.0758499914],\n [8.7e-9, 0, 0],\n [1.19e-9, 4.26807972611, 12566.1516999828],\n [1.7e-10, 4.0742262044, 18849.2275499742],\n [5e-11, 0.84308705203, 1047.7473117547],\n [5e-11, 0.05711572303, 84334.66158130829]\n ],\n \"5\": [\n [1.14e-9, 4.31455980099, 6283.0758499914],\n [2.4e-10, 0, 0]\n ]\n },\n R: {\n \"0\": [\n [1.00013988784, 0, 0],\n [0.01670699632, 3.09846350258, 6283.0758499914],\n [0.00013956024, 3.05524609456, 12566.1516999828],\n [0.0000308372, 5.19846674381, 77713.7714681205],\n [0.00001628463, 1.17387558054, 5753.3848848968],\n [0.00001575572, 2.84685214877, 7860.4193924392],\n [0.00000924799, 5.45292236722, 11506.7697697936],\n [0.00000542439, 4.56409151453, 3930.2096962196],\n [0.0000047211, 3.66100022149, 5884.9268465832],\n [0.0000032878, 5.89983686142, 5223.6939198022],\n [0.00000345969, 0.96368627272, 5507.5532386674],\n [0.00000306784, 0.29867139512, 5573.1428014331],\n [0.00000174844, 3.01193636733, 18849.2275499742],\n [0.00000243181, 4.2734953079, 11790.6290886588],\n [0.00000211836, 5.84714461348, 1577.3435424478],\n [0.0000018574, 5.02199710705, 10977.078804699],\n [0.00000109835, 5.0551063586, 5486.777843175],\n [9.8316e-7, 0.88681311278, 6069.7767545534],\n [8.65e-7, 5.68956418946, 15720.8387848784],\n [8.5831e-7, 1.27079125277, 161000.6857376741],\n [6.2917e-7, 0.92177053978, 529.6909650946],\n [5.7056e-7, 2.01374292245, 83996.84731811189],\n [6.4908e-7, 0.27251341435, 17260.1546546904],\n [4.9384e-7, 3.24501240359, 2544.3144198834],\n [5.5736e-7, 5.2415979917, 71430.69561812909],\n [4.252e-7, 6.01110257982, 6275.9623029906],\n [4.6966e-7, 2.57799853213, 775.522611324],\n [3.8963e-7, 5.36063832897, 4694.0029547076],\n [4.4666e-7, 5.53715663816, 9437.762934887],\n [3.5661e-7, 1.67447135798, 12036.4607348882],\n [3.1922e-7, 0.18368299942, 5088.6288397668],\n [3.1846e-7, 1.77775642078, 398.1490034082],\n [3.3193e-7, 0.24370221704, 7084.8967811152],\n [3.8245e-7, 2.39255343973, 8827.3902698748],\n [2.8468e-7, 1.21344887533, 6286.5989683404],\n [3.7486e-7, 0.82961281844, 19651.048481098],\n [3.6957e-7, 4.90107587287, 12139.5535091068],\n [3.4537e-7, 1.84270693281, 2942.4634232916],\n [2.6275e-7, 4.58896863104, 10447.3878396044],\n [2.4596e-7, 3.78660838036, 8429.2412664666],\n [2.3587e-7, 0.26866098169, 796.2980068164],\n [2.7795e-7, 1.89934427832, 6279.5527316424],\n [2.3927e-7, 4.99598548145, 5856.4776591154],\n [2.0345e-7, 4.65282190725, 2146.1654164752],\n [2.3287e-7, 2.80783632869, 14143.4952424306],\n [2.2099e-7, 1.95002636847, 3154.6870848956],\n [1.9509e-7, 5.38233922479, 2352.8661537718],\n [1.7958e-7, 0.1987136996, 6812.766815086],\n [1.7178e-7, 4.43322156854, 10213.285546211],\n [1.619e-7, 5.23159323213, 17789.845619785],\n [1.7315e-7, 6.15224075188, 16730.4636895958],\n [1.3814e-7, 5.18962074032, 8031.0922630584],\n [1.8834e-7, 0.67280058021, 149854.4001348079],\n [1.833e-7, 2.25348717053, 23581.2581773176],\n [1.3639e-7, 3.68511810757, 4705.7323075436],\n [1.3142e-7, 0.65267698994, 13367.9726311066],\n [1.0414e-7, 4.33285688501, 11769.8536931664],\n [9.978e-8, 4.20126336356, 6309.3741697912],\n [1.017e-7, 1.59366684542, 4690.4798363586],\n [7.564e-8, 2.62560597391, 6256.7775301916],\n [9.654e-8, 3.67583728703, 27511.4678735372],\n [6.743e-8, 0.56269927047, 3340.6124266998],\n [8.743e-8, 6.06359123461, 1748.016413067],\n [7.786e-8, 3.67371235367, 12168.0026965746],\n [6.633e-8, 5.66149277789, 11371.7046897582],\n [7.712e-8, 0.31242577788, 7632.9432596502],\n [6.586e-8, 3.13580054586, 801.8209311238],\n [7.46e-8, 5.6475806666, 11926.2544136688],\n [6.933e-8, 2.92384586372, 6681.2248533996],\n [6.805e-8, 1.42327153767, 23013.5395395872],\n [6.118e-8, 5.13395999022, 1194.4470102246],\n [6.477e-8, 2.64986648493, 19804.8272915828],\n [5.233e-8, 4.62432817299, 6438.4962494256],\n [6.147e-8, 3.02863936662, 233141.3144043615],\n [4.608e-8, 1.72194702724, 7234.794256242],\n [4.221e-8, 1.55697533726, 7238.6755916],\n [5.31e-8, 2.40821524293, 11499.6562227928],\n [5.128e-8, 5.3239896569, 11513.8833167944],\n [4.77e-8, 0.2555431173, 11856.2186514245],\n [5.519e-8, 2.09089153789, 17298.1823273262],\n [5.625e-8, 4.34052903053, 90955.5516944961],\n [4.578e-8, 4.4656964157, 5746.271337896],\n [3.788e-8, 4.9072829481, 4164.311989613],\n [5.337e-8, 5.09957905103, 31441.6775697568],\n [3.967e-8, 1.20054555175, 1349.8674096588],\n [4.005e-8, 3.02853885902, 1059.3819301892],\n [3.48e-8, 0.76066308841, 10973.55568635],\n [4.232e-8, 1.05485713117, 5760.4984318976],\n [4.582e-8, 3.76570026763, 6386.16862421],\n [3.335e-8, 3.13829943354, 6836.6452528338],\n [3.42e-8, 3.00043974511, 4292.3308329504],\n [3.595e-8, 5.70703236079, 5643.1785636774],\n [3.236e-8, 4.16387400645, 9917.6968745098],\n [4.154e-8, 2.59940749519, 7058.5984613154],\n [3.362e-8, 4.54577164994, 4732.0306273434],\n [2.978e-8, 1.3056126882, 6283.14316029419],\n [2.765e-8, 0.51311975671, 26.2983197998],\n [2.807e-8, 5.66230537649, 8635.9420037632],\n [2.927e-8, 5.7378783408, 16200.7727245012],\n [3.167e-8, 1.691817599, 11015.1064773348],\n [2.598e-8, 2.96244118358, 25132.3033999656],\n [3.519e-8, 3.62639325753, 244287.60000722768],\n [2.676e-8, 4.20727719487, 18073.7049386502],\n [2.978e-8, 1.74971565805, 6283.0085396886],\n [2.287e-8, 1.06976449088, 14314.1681130498],\n [2.863e-8, 5.92838917309, 14712.317116458],\n [3.071e-8, 0.23793217, 35371.8872659764],\n [2.656e-8, 0.89959301615, 12352.8526045448],\n [2.415e-8, 2.799751768, 709.9330485583],\n [2.811e-8, 3.51513864541, 21228.3920235458],\n [1.977e-8, 2.61358297551, 951.7184062506],\n [2.548e-8, 2.47684686575, 6208.2942514241],\n [1.999e-8, 0.56090396506, 7079.3738568078],\n [2.305e-8, 1.05376463592, 22483.84857449259],\n [1.855e-8, 2.86093570752, 5216.5803728014],\n [2.157e-8, 1.31395211105, 154717.6098876827],\n [1.97e-8, 4.36931551625, 167283.7615876655],\n [1.754e-8, 2.14452400686, 6290.1893969922],\n [1.628e-8, 5.85704450617, 10984.1923516998],\n [2.154e-8, 6.03828353794, 10873.9860304804],\n [1.714e-8, 3.70158195222, 1592.5960136328],\n [1.541e-8, 6.21599512982, 23543.23050468179],\n [1.602e-8, 1.99860679677, 10969.9652576982],\n [1.712e-8, 1.34295218697, 3128.3887650958],\n [1.647e-8, 5.54948299069, 6496.3749454294],\n [1.495e-8, 5.43980459648, 155.4203994342],\n [1.827e-8, 5.91227480351, 3738.761430108],\n [1.726e-8, 2.16765465036, 10575.4066829418],\n [1.532e-8, 5.35683107063, 13521.7514415914],\n [1.824e-8, 1.66056145084, 39302.096962196],\n [1.605e-8, 1.90930973224, 6133.5126528568],\n [1.282e-8, 2.46013372544, 13916.0191096416],\n [1.211e-8, 4.4136063155, 3894.1818295422],\n [1.394e-8, 1.7780192925, 9225.539273283],\n [1.571e-8, 4.95512957606, 25158.6017197654],\n [1.205e-8, 1.19212756308, 3.523118349],\n [1.132e-8, 2.69830084955, 6040.3472460174],\n [1.504e-8, 5.77577388271, 18209.33026366019],\n [1.393e-8, 1.62625077326, 5120.6011455836],\n [1.081e-8, 2.93726744446, 17256.6315363414],\n [1.232e-8, 0.71651766504, 143571.32428481648],\n [1.087e-8, 0.99769687961, 955.5997416086],\n [1.068e-8, 5.28472576591, 65147.6197681377],\n [1.169e-8, 3.11663802316, 14945.3161735544],\n [9.75e-9, 5.1088726078, 6172.869528772],\n [1.202e-8, 4.02992510403, 553.5694028424],\n [9.79e-9, 2.00000879106, 15110.4661198662],\n [9.62e-9, 4.023807714, 6282.0955289232],\n [9.99e-9, 3.6264300279, 6262.300454499],\n [1.03e-8, 5.84987815239, 213.299095438],\n [1.014e-8, 2.84227679965, 8662.240323563],\n [1.185e-8, 1.51330629149, 17654.7805397496],\n [9.67e-9, 2.67081017562, 5650.2921106782],\n [1.222e-8, 2.65423784904, 88860.05707098669],\n [9.86e-9, 2.36212814824, 6206.8097787158],\n [1.034e-8, 0.13634950642, 11712.9553182308],\n [1.103e-8, 3.08477302937, 43232.3066584156],\n [7.81e-9, 2.53374971725, 16496.3613962024],\n [1.019e-8, 3.04569392376, 6037.244203762],\n [7.95e-9, 5.80662989126, 5230.807466803],\n [8.13e-9, 3.57702871938, 10177.2576795336],\n [9.62e-9, 5.31470594766, 6284.0561710596],\n [7.17e-9, 5.95797471837, 12559.038152982],\n [9.67e-9, 2.74413738053, 6244.9428143536],\n [9.21e-9, 0.1016016083, 29088.811415985],\n [7.19e-9, 5.91788189939, 4136.9104335162],\n [6.88e-9, 3.89489045092, 1589.0728952838],\n [7.72e-9, 4.05505380285, 6127.6554505572],\n [7.06e-9, 5.49323197725, 22003.9146348698],\n [6.65e-9, 1.60002747134, 11087.2851259184],\n [6.9e-9, 4.50539825729, 426.598190876],\n [8.54e-9, 3.2610464506, 20426.571092422],\n [6.56e-9, 4.3241018294, 16858.4825329332],\n [8.4e-9, 2.59572585212, 28766.924424484],\n [6.86e-9, 0.61944033771, 11403.676995575],\n [7e-9, 3.40901412473, 7.1135470008],\n [7.28e-9, 0.04050185963, 5481.2549188676],\n [6.53e-9, 1.0386945123, 6062.6632075526],\n [5.59e-9, 4.79221805695, 20199.094959633],\n [6.33e-9, 5.70229959167, 45892.73043315699],\n [5.91e-9, 6.10986487621, 9623.6882766912],\n [5.2e-9, 3.62310356479, 5333.9002410216],\n [6.02e-9, 5.58381898589, 10344.2950653858],\n [4.96e-9, 2.21027756314, 1990.745017041],\n [6.91e-9, 1.96733114988, 12416.5885028482],\n [6.4e-9, 1.59062417043, 18319.5365848796],\n [6.25e-9, 3.82358168221, 13517.8701062334],\n [4.75e-9, 1.1702590418, 12569.6748183318],\n [6.6e-9, 5.08498512995, 283.8593188652],\n [6.64e-9, 4.50029469969, 47162.5163546352],\n [5.69e-9, 0.16318535463, 17267.26820169119],\n [5.68e-9, 3.86100969474, 6076.8903015542],\n [4.62e-9, 0.26368763517, 4590.910180489],\n [5.35e-9, 4.83225423196, 18422.62935909819],\n [4.66e-9, 0.75873879417, 7342.4577801806],\n [5.41e-9, 3.07212190556, 226858.23855437007],\n [6.1e-9, 1.53597089605, 33019.0211122046],\n [6.17e-9, 2.62356328726, 11190.377900137],\n [5.48e-9, 4.55798855803, 18875.525869774],\n [6.33e-9, 4.60110281228, 66567.48586525429],\n [5.87e-9, 5.78087907808, 632.7837393132],\n [6.03e-9, 5.38458554802, 316428.22867391503],\n [5.25e-9, 5.01522072363, 12132.439962106],\n [4.69e-9, 0.59975173763, 21954.15760939799],\n [5.48e-9, 3.50627043672, 17253.04110768959],\n [5.02e-9, 0.98804327589, 11609.8625440122],\n [5.68e-9, 1.98497313089, 7668.6374249425],\n [4.82e-9, 1.62460405687, 12146.6670561076],\n [3.91e-9, 3.68718382972, 18052.9295431578],\n [4.57e-9, 3.7721489661, 156137.47598479927],\n [4.01e-9, 5.2922154024, 15671.0817594066],\n [4.69e-9, 1.80963351735, 12562.6285816338],\n [5.14e-9, 3.37031288919, 20597.2439630412],\n [4.52e-9, 5.66811219778, 10454.5013866052],\n [3.75e-9, 4.98528185039, 9779.1086761254],\n [5.23e-9, 0.97215560834, 155427.542936241],\n [4.03e-9, 5.1394818977, 1551.045222648],\n [3.72e-9, 3.69883738807, 9388.0059094152],\n [3.67e-9, 4.43875659833, 4535.0594369244],\n [4.06e-9, 4.20863156497, 12592.4500197826],\n [3.62e-9, 2.55099560446, 242.728603974],\n [4.71e-9, 4.61907324819, 5436.9930152402],\n [3.88e-9, 4.960209284, 24356.7807886416],\n [4.41e-9, 5.83872966262, 3496.032826134],\n [3.49e-9, 6.16307810648, 19800.9459562248],\n [3.56e-9, 0.2381908124, 5429.8794682394],\n [3.46e-9, 5.60809622572, 2379.1644735716],\n [3.8e-9, 2.72105213132, 11933.3679606696],\n [4.32e-9, 0.24215988572, 17996.0311682222],\n [3.78e-9, 5.22516848076, 7477.522860216],\n [3.37e-9, 5.10885555836, 5849.3641121146],\n [3.15e-9, 0.57827745123, 10557.5941608238],\n [3.18e-9, 4.4994900732, 3634.6210245184],\n [3.23e-9, 1.55850824803, 10440.2742926036],\n [3.14e-9, 5.77154773334, 20.7753954924],\n [3.03e-9, 2.34615580398, 4686.8894077068],\n [4.14e-9, 5.9323760231, 51092.7260508548],\n [3.62e-9, 2.17561997119, 28237.2334593894],\n [2.88e-9, 0.18377405421, 13095.8426650774],\n [2.77e-9, 5.1295220503, 13119.72110282519],\n [3.25e-9, 6.18608287927, 6268.8487559898],\n [2.73e-9, 0.30522428863, 23141.5583829246],\n [2.67e-9, 5.76152585786, 5966.6839803348],\n [3.45e-9, 2.94246040875, 36949.2308084242],\n [2.53e-9, 5.20994580359, 24072.9214697764],\n [3.42e-9, 5.76212804329, 16460.33352952499],\n [3.07e-9, 6.01039067183, 22805.7355659936],\n [2.61e-9, 2.00304796059, 6148.010769956],\n [2.38e-9, 5.08241964961, 6915.8595893046],\n [2.49e-9, 2.94762789744, 135.0650800354],\n [3.06e-9, 3.89765478921, 10988.808157535],\n [3.08e-9, 0.05451027736, 4701.1165017084],\n [3.19e-9, 2.95712862064, 163096.18036118348],\n [2.72e-9, 2.07967681309, 4804.209275927],\n [2.09e-9, 4.43768461442, 6546.1597733642],\n [2.17e-9, 0.73691592312, 6303.8512454838],\n [2.03e-9, 0.32033085531, 25934.1243310894],\n [2.05e-9, 5.22936478995, 20995.3929664494],\n [2.13e-9, 0.20671418919, 28286.9904848612],\n [1.97e-9, 0.4828613129, 16737.5772365966],\n [2.3e-9, 6.06567392849, 6287.0080032545],\n [2.19e-9, 1.291942163, 5326.7866940208],\n [2.01e-9, 1.74700937253, 22743.4093795164],\n [2.07e-9, 4.45440927276, 6279.4854213396],\n [2.69e-9, 6.0564044503, 64471.99124174489],\n [1.9e-9, 0.99261116842, 29296.6153895786],\n [1.94e-9, 3.82656562755, 419.4846438752],\n [2.62e-9, 5.26961924126, 522.5774180938],\n [2.1e-9, 4.68618183158, 6254.6266625236],\n [1.97e-9, 2.80624554186, 4933.2084403326],\n [2.52e-9, 4.3622015462, 40879.4405046438],\n [2.61e-9, 1.07241516738, 55022.9357470744],\n [2.33e-9, 5.41751014958, 39609.6545831656],\n [1.85e-9, 4.14324541379, 5642.1982426092],\n [2.47e-9, 3.44855612987, 6702.5604938666],\n [2.05e-9, 4.04424043226, 536.8045120954],\n [1.91e-9, 3.15807087926, 16723.350142595],\n [2.22e-9, 5.16259496507, 23539.7073863328],\n [1.8e-9, 4.56214752149, 6489.2613984286],\n [2.27e-9, 0.60156339452, 5905.7022420756],\n [1.7e-9, 0.93185903228, 16062.1845261168],\n [1.59e-9, 0.92751013112, 23937.856389741],\n [1.57e-9, 4.69607868164, 6805.6532680852],\n [2.18e-9, 0.8553337343, 16627.3709153772],\n [1.69e-9, 0.94641052064, 3097.88382272579],\n [2.07e-9, 4.88410451334, 6286.6662786432],\n [1.6e-9, 4.95943826819, 10021.8372800994],\n [1.75e-9, 6.12762824563, 239424.39025435288],\n [1.73e-9, 3.13887234973, 6179.9830757728],\n [1.57e-9, 3.62822057807, 18451.07854656599],\n [2.06e-9, 5.74617821138, 3646.3503773544],\n [1.57e-9, 4.67695912207, 6709.6740408674],\n [1.46e-9, 3.09506069745, 4907.3020501456],\n [1.65e-9, 2.2713912876, 10660.6869350424],\n [1.44e-9, 3.96947747592, 6019.9919266186],\n [1.71e-9, 5.91302216729, 6058.7310542895],\n [1.44e-9, 2.1315565512, 26084.0218062162],\n [1.51e-9, 0.67417383565, 2388.8940204492],\n [1.96e-9, 1.67718461229, 2107.0345075424],\n [1.46e-9, 5.10373877968, 10770.8932562618],\n [1.87e-9, 1.23915444627, 19402.7969528166],\n [1.37e-9, 1.26247412216, 12566.2190102856],\n [1.91e-9, 5.03547476279, 263.0839233728],\n [1.37e-9, 3.52825454595, 639.897286314],\n [1.35e-9, 0.73840670927, 5017.508371365],\n [1.64e-9, 2.39195095081, 6357.8574485587],\n [1.68e-9, 0.05515907462, 9380.9596727172],\n [1.61e-9, 1.15721259392, 26735.9452622132],\n [1.44e-9, 1.76097645199, 5888.4499649322],\n [1.31e-9, 2.51859277344, 6599.467719648],\n [1.42e-9, 2.43802911123, 5881.4037282342],\n [1.59e-9, 5.90325893762, 6281.5913772831],\n [1.51e-9, 3.72338532519, 12669.2444742014],\n [1.32e-9, 2.38417741883, 6525.8044539654],\n [1.27e-9, 0.00254936441, 10027.9031957292],\n [1.48e-9, 2.85102145528, 6418.1409300268],\n [1.43e-9, 5.7446027956, 26087.9031415742],\n [1.72e-9, 0.4128996224, 174242.4659640497],\n [1.36e-9, 4.15497742275, 6311.5250374592],\n [1.7e-9, 5.98194913129, 327574.51427678124],\n [1.36e-9, 2.48430537541, 13341.6743113068],\n [1.49e-9, 0.33002271275, 245.8316462294],\n [1.65e-9, 2.496679246, 58953.145443294],\n [1.23e-9, 1.67328384813, 32217.2001810808],\n [1.23e-9, 3.45660563754, 6277.552925684],\n [1.17e-9, 0.86065134175, 6245.0481773556],\n [1.49e-9, 5.61358281003, 5729.506447149],\n [1.28e-9, 0.71204006448, 103.0927742186],\n [1.59e-9, 2.43166592149, 221995.02880149524],\n [1.37e-9, 1.706577092, 12566.08438968],\n [1.29e-9, 2.80667872683, 6016.4688082696],\n [1.13e-9, 3.58302904101, 25685.872802808],\n [1.09e-9, 3.26403795962, 6819.8803620868],\n [1.22e-9, 0.34120688202, 1162.4747044078],\n [1.06e-9, 1.59721172719, 17782.7320727842],\n [1.44e-9, 2.28891651774, 12489.8856287072],\n [1.37e-9, 5.82029768354, 44809.6502008634],\n [1.34e-9, 1.26539983018, 5331.3574437408],\n [1.03e-9, 5.96518130595, 6321.1035226272],\n [1.09e-9, 0.33808549034, 11300.5842213564],\n [1.29e-9, 5.8918727719, 12029.3471878874],\n [1.22e-9, 5.77325634636, 11919.140866668],\n [1.07e-9, 6.2499898935, 77690.75950573849],\n [1.07e-9, 1.00535580713, 77736.78343050249],\n [1.15e-9, 5.86963518266, 12721.572099417],\n [1.02e-9, 5.66283467269, 5540.0857894588],\n [1.43e-9, 0.24122178432, 4214.0690150848],\n [1.43e-9, 0.88529649733, 7576.560073574],\n [1.07e-9, 2.92124030351, 31415.379249957],\n [1e-9, 5.99485644501, 4061.2192153944],\n [1.03e-9, 2.41941934525, 5547.1993364596],\n [1.04e-9, 4.44106051277, 2118.7638603784],\n [1.1e-9, 0.37559635174, 5863.5912061162],\n [1.24e-9, 2.55619029611, 12539.853380183],\n [1.1e-9, 3.66952094465, 238004.5241572363],\n [1.12e-9, 4.32512422724, 97238.62754448749],\n [1.2e-9, 1.26895630075, 12043.574281889],\n [9.7e-10, 5.42612959752, 7834.1210726394],\n [9.4e-10, 2.56461130309, 19004.6479494084],\n [1.05e-9, 5.68272475301, 16522.6597160022],\n [1.17e-9, 3.65425622684, 34520.3093093808],\n [1.08e-9, 1.24206843948, 84672.47584450469],\n [9.8e-10, 0.13589994287, 11080.1715789176],\n [9.7e-10, 2.46722096722, 71980.63357473118],\n [9.5e-10, 5.36958330451, 6288.5987742988],\n [9.6e-10, 0.20796618776, 18139.2945014159],\n [1.11e-9, 5.01961920313, 11823.1616394502],\n [9e-10, 2.72355843779, 26880.3198130326],\n [9.9e-10, 0.90164266199, 18635.9284545362],\n [1.26e-9, 4.78722177847, 305281.9430710488],\n [1.24e-9, 5.00979495566, 172146.9713405403],\n [9e-10, 4.50544881196, 40077.61957352],\n [1.04e-9, 5.6367968071, 2787.0430238574],\n [9.1e-10, 5.43564326147, 6272.0301497275],\n [1e-9, 2.00639461597, 12323.4230960088],\n [1.17e-9, 2.35555589778, 83286.91426955358],\n [1.05e-9, 2.59824000109, 30666.1549584328],\n [9e-10, 2.35779490026, 12491.3701014155],\n [8.9e-10, 3.57152453732, 11720.0688652316],\n [9.5e-10, 5.67015349858, 14919.0178537546],\n [8.7e-10, 1.86043406047, 27707.5424942948],\n [1.06e-9, 3.04150600352, 22345.2603761082],\n [8.2e-10, 5.58298993353, 10241.2022911672],\n [8.3e-10, 3.10607039533, 36147.4098773004],\n [9.4e-10, 5.47749711149, 9924.8104215106],\n [8.2e-10, 4.71988314145, 15141.390794312],\n [9.6e-10, 3.89073946348, 6379.0550772092],\n [1.1e-9, 4.92131611151, 5621.8429232104],\n [1.1e-9, 4.89978492291, 72140.6286666874],\n [9.7e-10, 5.20764563059, 6303.4311693902],\n [8.5e-10, 1.61269222311, 33326.5787331742],\n [9.3e-10, 1.32651591333, 23020.65308658799],\n [9e-10, 0.5773301638, 26482.1708096244],\n [7.8e-10, 3.99588630754, 11293.4706743556],\n [1.06e-9, 3.92012705073, 62883.3551395136],\n [9.8e-10, 2.94397773524, 316.3918696566],\n [7.6e-10, 3.96310417608, 29026.48522950779],\n [9.8e-10, 0.95914722366, 48739.859897083],\n [7.8e-10, 1.97068528043, 90279.92316810328],\n [7.6e-10, 0.23027966596, 21424.4666443034],\n [7.9e-10, 1.46227790922, 8982.810669309],\n [7.8e-10, 2.28840998832, 266.6070417218],\n [7.1e-10, 1.5194076559, 33794.5437235286],\n [7.6e-10, 0.22880641443, 57375.8019008462],\n [9.7e-10, 0.39449562097, 24279.10701821359],\n [7.5e-10, 2.77638584795, 12964.300703391],\n [7.7e-10, 5.18846946344, 11520.9968637952],\n [6.8e-10, 0.50006599129, 4274.5183108324],\n [7.5e-10, 2.07323762803, 15664.03552270859],\n [7.7e-10, 0.4666517878, 16207.886271502],\n [8.1e-10, 4.10452219483, 161710.6187862324],\n [7.1e-10, 3.91415328513, 7875.6718636242],\n [8.1e-10, 0.91938383406, 74.7815985673],\n [8.3e-10, 4.69916218791, 23006.42599258639],\n [6.9e-10, 0.98999300277, 6393.2821712108],\n [6.5e-10, 5.41938745446, 28628.3362260996],\n [7.3e-10, 2.45564765251, 15508.6151232744],\n [6.5e-10, 3.02336771694, 5959.570433334],\n [6.4e-10, 0.18375587635, 1066.49547719],\n [8e-10, 5.81239171612, 12341.8069042809],\n [6.6e-10, 2.15105504851, 38.0276726358],\n [6.7e-10, 5.14047250153, 9814.6041002912],\n [6.2e-10, 2.43313614978, 10138.1095169486],\n [6.8e-10, 2.24442548639, 24383.0791084414],\n [7.8e-10, 1.39649333997, 9411.4646150872],\n [5.9e-10, 4.95362151577, 35707.7100829074],\n [7.3e-10, 1.35229143121, 5327.4761083828],\n [5.7e-10, 3.16018882154, 5490.300961524],\n [7.2e-10, 5.91833527334, 10881.0995774812],\n [6.7e-10, 0.66414713064, 29864.334027309],\n [6.5e-10, 0.30352816135, 7018.9523635232],\n [5.9e-10, 5.36231868425, 10239.5838660108],\n [5.6e-10, 3.22196331515, 2636.725472637],\n [6.8e-10, 5.32086226658, 3116.6594122598],\n [5.9e-10, 1.63156134967, 61306.0115970658],\n [5.4e-10, 4.29491690425, 21947.1113727],\n [7e-10, 0.29271565928, 6528.9074962208],\n [5.7e-10, 5.89190132575, 34513.2630726828],\n [5.4e-10, 2.51856815404, 6279.1945146334],\n [7.4e-10, 1.38235845304, 9967.4538999816],\n [5.4e-10, 0.92276712152, 6286.9571853494],\n [7e-10, 5.00933012248, 6453.7487206106],\n [5.3e-10, 3.86543309344, 32370.9789915656],\n [5.5e-10, 4.51794544854, 34911.412076091],\n [6.3e-10, 5.41479412056, 11502.8376165305],\n [6.3e-10, 2.34416220742, 11510.7019230567],\n [5.6e-10, 0.91310629913, 9910.583327509],\n [6.7e-10, 4.03308763854, 34596.3646546524],\n [6e-10, 5.57024703495, 5756.9080032458],\n [7.2e-10, 2.80863088166, 10866.8724834796],\n [6.6e-10, 6.12047940728, 12074.488407524],\n [5.1e-10, 2.59519527563, 11396.5634485742],\n [6.2e-10, 5.14746754396, 25287.7237993998],\n [5.4e-10, 2.50994032776, 5999.2165311262],\n [5.1e-10, 4.51195861837, 29822.7832363242],\n [5.9e-10, 0.44167237876, 250570.6758572191],\n [5.1e-10, 3.6884906676, 6262.7205305926],\n [4.9e-10, 0.54704693048, 22594.05489571199],\n [6.5e-10, 2.38423614501, 52670.0695933026],\n [6.9e-10, 5.34363738671, 66813.5648357332],\n [5.6e-10, 2.67216180349, 17892.93839400359],\n [4.9e-10, 4.18361320516, 18606.4989460002],\n [5.5e-10, 0.83886167974, 20452.8694122218],\n [5e-10, 1.46327331958, 37455.7264959744],\n [5.8e-10, 3.34847975377, 33990.6183442862],\n [6.5e-10, 1.45522693982, 76251.32777062019],\n [5.6e-10, 2.356506642, 37724.7534197482],\n [4.8e-10, 1.80689447612, 206.1855484372],\n [5.6e-10, 3.84224878744, 5483.254724826],\n [5.3e-10, 0.17334326094, 77717.29458646949],\n [5.3e-10, 0.79879700631, 77710.24834977149],\n [4.7e-10, 0.43240779709, 735.8765135318],\n [5.3e-10, 4.58786566028, 11616.976091013],\n [4.8e-10, 6.20230111054, 4171.4255366138],\n [5.2e-10, 2.9171905303, 6993.0088985497],\n [5.7e-10, 3.42008310383, 50317.2034395308],\n [4.8e-10, 0.12356889012, 13362.4497067992],\n [6e-10, 5.52056066934, 949.1756089698],\n [4.5e-10, 3.37963782356, 10763.779709261],\n [4.7e-10, 5.50958184902, 12779.4507954208],\n [5.2e-10, 5.42770349015, 310145.1528239236],\n [6.1e-10, 2.93237974631, 5791.4125575326],\n [4.4e-10, 2.87440620802, 8584.6616659008],\n [4.6e-10, 4.0314179656, 10667.8004820432],\n [4.4e-10, 1.21579107625, 6272.4391846416],\n [4.7e-10, 2.57670800912, 11492.542675792],\n [4.4e-10, 3.62570223167, 63658.8777508376],\n [5.1e-10, 0.84531181151, 12345.739057544],\n [4.6e-10, 1.17584556517, 149.5631971346],\n [4.3e-10, 0.01524970172, 37853.8754993826],\n [4.3e-10, 0.79038834934, 640.8776073822],\n [4.4e-10, 2.22554419931, 6293.7125153412],\n [4.9e-10, 1.01528394907, 149144.46708624958],\n [4.1e-10, 3.27146326065, 8858.3149443206],\n [4.5e-10, 3.03765521215, 65236.2212932854],\n [5.8e-10, 5.45843180927, 1975.492545856],\n [4.1e-10, 1.32190847146, 2547.8375382324],\n [4.7e-10, 3.67626039848, 28313.288804661],\n [4.7e-10, 6.21438985953, 10991.3058987006],\n [4e-10, 2.37237751212, 8273.8208670324],\n [5.6e-10, 1.09773690181, 77376.2010224076],\n [4e-10, 2.35698541041, 2699.7348193176],\n [4.3e-10, 5.28030897946, 17796.9591667858],\n [5.4e-10, 2.59175932091, 22910.44676536859],\n [5.5e-10, 0.07988985505, 83467.15635301729],\n [4.1e-10, 4.47510694062, 5618.3198048614],\n [4e-10, 1.35670430524, 27177.8515292002],\n [4.1e-10, 2.48011323946, 6549.6828917132],\n [5e-10, 2.56387920528, 82576.9812209953],\n [4.2e-10, 4.78798367468, 7856.89627409019],\n [4.7e-10, 2.75482175292, 18202.21671665939],\n [3.9e-10, 1.97008298629, 24491.4257925834],\n [4.2e-10, 4.04346599946, 7863.9425107882],\n [3.9e-10, 3.0103393642, 853.196381752],\n [3.8e-10, 0.49178679251, 38650.173506199],\n [4.4e-10, 1.35931241699, 21393.5419698576],\n [3.6e-10, 4.86047906533, 4157.1984426122],\n [4.3e-10, 5.64354880978, 1062.9050485382],\n [3.9e-10, 3.92736779879, 3903.9113764198],\n [4e-10, 5.3969491832, 9498.2122306346],\n [4.3e-10, 2.40863861919, 29424.634232916],\n [4.6e-10, 2.08022244271, 12573.2652469836],\n [5e-10, 6.15760345261, 78051.34191383338]\n ],\n \"1\": [\n [0.00103018607, 1.10748968172, 6283.0758499914],\n [0.00001721238, 1.06442300386, 12566.1516999828],\n [0.00000702217, 3.14159265359, 0],\n [3.2345e-7, 1.02168583254, 18849.2275499742],\n [3.0801e-7, 2.84358443952, 5507.5532386674],\n [2.4978e-7, 1.31906570344, 5223.6939198022],\n [1.8487e-7, 1.42428709076, 1577.3435424478],\n [1.0077e-7, 5.91385248388, 10977.078804699],\n [8.635e-8, 0.27158192945, 5486.777843175],\n [8.654e-8, 1.42046854427, 6275.9623029906],\n [5.069e-8, 1.68613408916, 5088.6288397668],\n [4.985e-8, 6.01402338185, 6286.5989683404],\n [4.667e-8, 5.98749245692, 529.6909650946],\n [4.395e-8, 0.51800423445, 4694.0029547076],\n [3.87e-8, 4.74932206877, 2544.3144198834],\n [3.755e-8, 5.07053801166, 796.2980068164],\n [4.1e-8, 1.08424801084, 9437.762934887],\n [3.518e-8, 0.02290216978, 83996.84731811189],\n [3.436e-8, 0.94937503872, 71430.69561812909],\n [3.221e-8, 6.15628775321, 2146.1654164752],\n [3.418e-8, 5.4115158188, 775.522611324],\n [2.863e-8, 5.48433323746, 10447.3878396044],\n [2.525e-8, 0.24296913555, 398.1490034082],\n [2.205e-8, 4.94892172085, 6812.766815086],\n [2.186e-8, 0.41991932164, 8031.0922630584],\n [2.828e-8, 3.41986300734, 2352.8661537718],\n [2.554e-8, 6.13241770582, 6438.4962494256],\n [1.932e-8, 5.31374587091, 8429.2412664666],\n [2.427e-8, 3.09118902115, 4690.4798363586],\n [1.73e-8, 1.53685999718, 4705.7323075436],\n [2.25e-8, 3.6883639562, 7084.8967811152],\n [2.094e-8, 1.281690604, 1748.016413067],\n [1.483e-8, 3.22226346483, 7234.794256242],\n [1.434e-8, 0.81293662216, 14143.4952424306],\n [1.754e-8, 3.22883705112, 6279.5527316424],\n [1.583e-8, 4.09815978783, 11499.6562227928],\n [1.575e-8, 5.53890314149, 3154.6870848956],\n [1.847e-8, 1.82041234937, 7632.9432596502],\n [1.499e-8, 3.63177937611, 11513.8833167944],\n [1.337e-8, 4.64442556061, 6836.6452528338],\n [1.275e-8, 2.69329661394, 1349.8674096588],\n [1.348e-8, 6.15284035323, 5746.271337896],\n [1.126e-8, 3.35676107739, 17789.845619785],\n [1.47e-8, 3.65282991735, 1194.4470102246],\n [1.101e-8, 4.4974742767, 4292.3308329504],\n [1.168e-8, 2.58033028504, 13367.9726311066],\n [1.236e-8, 5.64980098028, 5760.4984318976],\n [9.85e-9, 0.65326301914, 5856.4776591154],\n [9.28e-9, 2.3255501829, 10213.285546211],\n [1.073e-8, 5.82672338169, 12036.4607348882],\n [9.18e-9, 0.76907130762, 16730.4636895958],\n [8.76e-9, 1.50335727807, 11926.2544136688],\n [1.023e-8, 5.62071200879, 6256.7775301916],\n [8.53e-9, 0.6567813463, 155.4203994342],\n [8.02e-9, 4.10519132094, 951.7184062506],\n [8.59e-9, 1.42880883564, 5753.3848848968],\n [9.92e-9, 1.1423800161, 1059.3819301892],\n [8.14e-9, 1.63584008733, 6681.2248533996],\n [6.64e-9, 4.55039663226, 5216.5803728014],\n [6.27e-9, 1.50782904323, 5643.1785636774],\n [6.44e-9, 4.19480024859, 6040.3472460174],\n [5.9e-9, 6.18371704849, 4164.311989613],\n [6.35e-9, 0.5242358477, 6290.1893969922],\n [6.5e-9, 0.97935492869, 25132.3033999656],\n [5.68e-9, 2.30121525349, 10973.55568635],\n [5.49e-9, 5.26737827342, 3340.6124266998],\n [5.47e-9, 2.20143332641, 1592.5960136328],\n [5.26e-9, 0.92464258271, 11371.7046897582],\n [4.93e-9, 5.91036281399, 3894.1818295422],\n [4.83e-9, 1.6600571154, 12168.0026965746],\n [5.14e-9, 3.59683072524, 10969.9652576982],\n [5.16e-9, 3.97164781773, 17298.1823273262],\n [5.29e-9, 5.0353867768, 9917.6968745098],\n [4.87e-9, 2.50544745305, 6127.6554505572],\n [4.19e-9, 4.05235655996, 10984.1923516998],\n [5.38e-9, 5.54081539813, 553.5694028424],\n [4.02e-9, 2.16859478359, 7860.4193924392],\n [5.52e-9, 2.32219865498, 11506.7697697936],\n [3.67e-9, 3.39145698451, 6496.3749454294],\n [3.6e-9, 5.34467204596, 7079.3738568078],\n [3.34e-9, 3.61346365667, 11790.6290886588],\n [4.54e-9, 0.28755421898, 801.8209311238],\n [4.19e-9, 3.69613970002, 10575.4066829418],\n [3.19e-9, 0.30793759304, 16200.7727245012],\n [3.76e-9, 5.81560210508, 7058.5984613154],\n [3.64e-9, 1.08425056923, 6309.3741697912],\n [2.94e-9, 4.54798604178, 11856.2186514245],\n [2.9e-9, 1.26451946335, 8635.9420037632],\n [3.94e-9, 4.15683669084, 26.2983197998],\n [2.6e-9, 5.09424572996, 10177.2576795336],\n [2.41e-9, 2.25766000302, 11712.9553182308],\n [2.39e-9, 1.06936978753, 242.728603974],\n [2.76e-9, 3.44260568764, 5884.9268465832],\n [2.55e-9, 5.38496803122, 21228.3920235458],\n [3.07e-9, 4.24313885601, 3738.761430108],\n [2.13e-9, 3.44661200485, 213.299095438],\n [1.98e-9, 0.69427265195, 1990.745017041],\n [1.95e-9, 5.16563409007, 12352.8526045448],\n [2.13e-9, 3.89937836808, 13916.0191096416],\n [2.14e-9, 4.00445200772, 5230.807466803],\n [1.84e-9, 5.59805976614, 6283.14316029419],\n [1.84e-9, 2.85275392124, 7238.6755916],\n [1.79e-9, 2.54259058252, 14314.1681130498],\n [2.36e-9, 5.58826125715, 6069.7767545534],\n [1.89e-9, 2.72689937708, 6062.6632075526],\n [1.84e-9, 6.04216273598, 6283.0085396886],\n [2.25e-9, 1.66128561344, 4732.0306273434],\n [2.3e-9, 3.62591335086, 6284.0561710596],\n [1.72e-9, 0.97566476085, 3930.2096962196],\n [1.62e-9, 2.19467339429, 18073.7049386502],\n [2.15e-9, 1.04672844028, 3496.032826134],\n [1.82e-9, 5.17782354566, 17253.04110768959],\n [1.67e-9, 2.17754938066, 6076.8903015542],\n [1.67e-9, 4.75672473773, 17267.26820169119],\n [1.49e-9, 0.80944185798, 709.9330485583],\n [1.49e-9, 0.17584214812, 9779.1086761254],\n [1.92e-9, 5.00680790235, 11015.1064773348],\n [1.41e-9, 4.38420380014, 4136.9104335162],\n [1.58e-9, 4.60969054283, 9623.6882766912],\n [1.33e-9, 3.30507062245, 154717.6098876827],\n [1.66e-9, 6.13191098325, 3.523118349],\n [1.81e-9, 1.60715321141, 7.1135470008],\n [1.5e-9, 5.28136702046, 13517.8701062334],\n [1.42e-9, 0.49788089569, 25158.6017197654],\n [1.24e-9, 6.03440459813, 9225.539273283],\n [1.24e-9, 0.99251562639, 65147.6197681377],\n [1.28e-9, 1.92032744711, 22483.84857449259],\n [1.24e-9, 3.99739675184, 4686.8894077068],\n [1.21e-9, 2.37814805239, 167283.7615876655],\n [1.23e-9, 5.6231511294, 5642.1982426092],\n [1.17e-9, 5.81755956156, 12569.6748183318],\n [1.57e-9, 3.40236948518, 16496.3613962024],\n [1.3e-9, 2.10499918142, 1589.0728952838],\n [1.16e-9, 0.55839966736, 5849.3641121146],\n [1.23e-9, 5.81645568991, 6282.0955289232],\n [1.1e-9, 0.42176497674, 6172.869528772],\n [1.5e-9, 4.26279600865, 3128.3887650958],\n [1.06e-9, 2.27436561182, 5429.8794682394],\n [1.14e-9, 1.52894564202, 12559.038152982],\n [1.21e-9, 0.39459045915, 12132.439962106],\n [1.04e-9, 2.41845930933, 426.598190876],\n [1.09e-9, 5.82786999856, 16858.4825329332],\n [1.02e-9, 4.4662648491, 23543.23050468179],\n [1e-9, 2.93812275274, 4535.0594369244],\n [9.7e-10, 3.97935904984, 6133.5126528568],\n [9.8e-10, 0.87616810121, 6525.8044539654],\n [1.1e-9, 6.22339014386, 12146.6670561076],\n [9.8e-10, 3.17344332543, 10440.2742926036],\n [9.6e-10, 2.44128701699, 3097.88382272579],\n [9.9e-10, 5.75642493267, 7342.4577801806],\n [9e-10, 0.18984343165, 13119.72110282519],\n [9.9e-10, 5.58884724219, 2388.8940204492],\n [9.1e-10, 6.04278320182, 20426.571092422],\n [8e-10, 1.29028142103, 5650.2921106782],\n [8.6e-10, 3.94529200528, 10454.5013866052],\n [8.5e-10, 1.92836879835, 29088.811415985],\n [7.6e-10, 2.70726317966, 143571.32428481648],\n [9.1e-10, 5.63859073351, 8827.3902698748],\n [7.6e-10, 1.80783856698, 28286.9904848612],\n [7.5e-10, 3.40858032804, 5481.2549188676],\n [7e-10, 4.53719487231, 17256.6315363414],\n [8.9e-10, 1.10064490942, 11769.8536931664],\n [6.6e-10, 2.78384937771, 536.8045120954],\n [6.8e-10, 3.88199295043, 17260.1546546904],\n [8.8e-10, 3.88075269535, 7477.522860216],\n [6.1e-10, 6.17558202197, 11087.2851259184],\n [6e-10, 4.34824715818, 6206.8097787158],\n [8.2e-10, 4.59843208943, 9388.0059094152],\n [7.9e-10, 1.63139280394, 4933.2084403326],\n [8.1e-10, 1.55550779371, 9380.9596727172],\n [7.8e-10, 4.20905757519, 5729.506447149],\n [5.8e-10, 5.76889633224, 3634.6210245184],\n [6e-10, 0.93813100594, 12721.572099417],\n [7.1e-10, 6.11408885148, 8662.240323563],\n [5.7e-10, 5.48112524468, 18319.5365848796],\n [7e-10, 0.01749174864, 14945.3161735544],\n [7.4e-10, 1.0997604582, 16460.33352952499],\n [5.6e-10, 1.63036186739, 15720.8387848784],\n [5.5e-10, 4.86788348404, 13095.8426650774],\n [6e-10, 5.93729841267, 12539.853380183],\n [5.4e-10, 0.22608242982, 15110.4661198662],\n [5.4e-10, 2.30250047594, 16062.1845261168],\n [6.4e-10, 2.13513754101, 7875.6718636242],\n [5.9e-10, 5.87963500139, 5331.3574437408],\n [5.8e-10, 2.30546168615, 955.5997416086],\n [4.9e-10, 1.93839278478, 5333.9002410216],\n [5.4e-10, 5.80331607119, 12043.574281889],\n [5.4e-10, 4.44671053809, 4701.1165017084],\n [4.9e-10, 0.30241161485, 6805.6532680852],\n [4.6e-10, 2.76898193028, 6709.6740408674],\n [4.6e-10, 3.98449608961, 98068.53671630539],\n [4.9e-10, 3.72022009896, 12323.4230960088],\n [4.5e-10, 3.30065998328, 22003.9146348698],\n [4.8e-10, 0.71071357303, 6303.4311693902],\n [6.1e-10, 1.66030429494, 6262.300454499],\n [4.7e-10, 1.26317154881, 11919.140866668],\n [5.1e-10, 1.08020906825, 10988.808157535],\n [4.5e-10, 0.89150445122, 51868.2486621788],\n [4.3e-10, 0.57756724285, 24356.7807886416],\n [4.3e-10, 1.61526242998, 6277.552925684],\n [4.5e-10, 2.96132920534, 8982.810669309],\n [4.3e-10, 5.74295325645, 11403.676995575],\n [5.5e-10, 3.14274403422, 33019.0211122046],\n [5.7e-10, 0.06379726305, 15671.0817594066],\n [4.1e-10, 2.53761820726, 6262.7205305926],\n [4e-10, 1.53130436944, 18451.07854656599],\n [5.2e-10, 1.71451922581, 1551.045222648],\n [5.5e-10, 0.89439119424, 11933.3679606696],\n [4.5e-10, 3.88495384656, 60530.4889857418],\n [4e-10, 4.75740908001, 38526.574350872],\n [4e-10, 3.77498297348, 26087.9031415742],\n [3.9e-10, 2.97113832621, 2118.7638603784],\n [4e-10, 3.36050962605, 10021.8372800994],\n [4.7e-10, 1.67051113434, 6303.8512454838],\n [5.2e-10, 5.21827368711, 77713.7714681205],\n [4.7e-10, 4.26356628717, 21424.4666443034],\n [3.7e-10, 1.66712389942, 6819.8803620868],\n [3.7e-10, 0.65746800933, 12029.3471878874],\n [3.5e-10, 3.36255650927, 24072.9214697764],\n [3.6e-10, 0.11087914947, 10344.2950653858],\n [4e-10, 4.14725582115, 2787.0430238574],\n [3.5e-10, 5.93650887012, 31570.7996493912],\n [3.6e-10, 2.15108874765, 30774.5016425748],\n [3.6e-10, 1.75078825382, 16207.886271502],\n [3.4e-10, 2.75708224536, 12139.5535091068],\n [3.4e-10, 6.168913788, 24491.4257925834],\n [3.4e-10, 2.31528650443, 55798.4583583984],\n [3.2e-10, 4.21446357042, 15664.03552270859],\n [3.4e-10, 3.19783054699, 32217.2001810808],\n [3.9e-10, 1.24979117796, 6418.1409300268],\n [3.8e-10, 5.89832942685, 640.8776073822],\n [3.3e-10, 4.80200120107, 16723.350142595],\n [3.2e-10, 1.72442327688, 27433.88921587499],\n [3.5e-10, 4.44608896525, 18202.21671665939],\n [3.1e-10, 4.5279073128, 6702.5604938666],\n [3.4e-10, 3.96287980676, 18216.443810661],\n [3e-10, 5.06259854444, 226858.23855437007],\n [3.4e-10, 1.43910280005, 49515.382508407],\n [3e-10, 0.29303163371, 13521.7514415914],\n [2.9e-10, 2.0263384022, 11609.8625440122],\n [3e-10, 2.5492323024, 9924.8104215106],\n [3.2e-10, 4.91793198558, 11300.5842213564],\n [3e-10, 0.23284423547, 23581.2581773176],\n [2.9e-10, 1.62807736495, 639.897286314],\n [2.8e-10, 3.84568936822, 2699.7348193176],\n [2.9e-10, 1.83149729794, 29822.7832363242],\n [3.3e-10, 4.60320094415, 19004.6479494084],\n [2.7e-10, 1.86151121799, 6288.5987742988],\n [3e-10, 4.4649407224, 36147.4098773004],\n [2.8e-10, 5.19684492912, 5863.5912061162],\n [3.5e-10, 4.52695674113, 36949.2308084242],\n [2.7e-10, 3.52528177609, 10770.8932562618],\n [2.6e-10, 1.48499438453, 11080.1715789176],\n [3.5e-10, 2.82154380962, 19402.7969528166],\n [2.5e-10, 2.46339998836, 6279.4854213396],\n [2.6e-10, 4.97688894643, 16737.5772365966],\n [2.7e-10, 0.408271125, 12964.300703391],\n [2.9e-10, 4.15148654061, 45892.73043315699],\n [2.6e-10, 4.56404104286, 17796.9591667858],\n [2.5e-10, 2.89309528854, 6286.6662786432],\n [2.6e-10, 4.82914580957, 1066.49547719],\n [3.1e-10, 3.93096113738, 29864.334027309],\n [2.4e-10, 6.14987193584, 18606.4989460002],\n [2.4e-10, 3.74225964547, 29026.48522950779],\n [2.5e-10, 5.70460621565, 27707.5424942948],\n [2.5e-10, 5.33928840652, 15141.390794312],\n [2.3e-10, 2.37624087345, 17996.0311682222],\n [2.6e-10, 1.34231351782, 18875.525869774],\n [2.2e-10, 5.5079162612, 6245.0481773556],\n [2.4e-10, 1.33998410121, 19800.9459562248],\n [2.3e-10, 0.2251228089, 6279.7894925736],\n [2.2e-10, 1.17576471775, 11925.2740926006],\n [2.2e-10, 3.5860360664, 6915.8595893046],\n [2.3e-10, 3.21621246666, 6286.3622074092],\n [2.9e-10, 2.09564449439, 15265.8865193004],\n [2.2e-10, 4.74660932338, 28230.18722269139],\n [2.1e-10, 2.30688751432, 5999.2165311262],\n [2.8e-10, 3.92087592807, 18208.349942592],\n [2.1e-10, 3.22643339385, 25934.1243310894],\n [2.1e-10, 3.04956726238, 6566.9351688566],\n [2.7e-10, 5.35645770522, 33794.5437235286],\n [2.5e-10, 5.91542362188, 6489.2613984286],\n [2e-10, 1.52296293311, 135.0650800354],\n [1.9e-10, 1.78134428631, 156137.47598479927],\n [1.9e-10, 0.34388684087, 5327.4761083828],\n [2.6e-10, 3.41701003233, 25287.7237993998],\n [1.9e-10, 2.86664271911, 18422.62935909819],\n [1.9e-10, 4.71432851499, 77690.75950573849],\n [1.9e-10, 2.54227398241, 77736.78343050249],\n [2e-10, 5.91915117116, 48739.859897083]\n ],\n \"2\": [\n [0.00004359385, 5.78455133808, 6283.0758499914],\n [0.00000123633, 5.57935427994, 12566.1516999828],\n [1.2342e-7, 3.14159265359, 0],\n [8.792e-8, 3.62777893099, 77713.7714681205],\n [5.689e-8, 1.86958905084, 5573.1428014331],\n [3.302e-8, 5.47034879713, 18849.2275499742],\n [1.471e-8, 4.47964125007, 5507.5532386674],\n [1.013e-8, 2.81323115556, 5223.6939198022],\n [8.54e-9, 3.107765669, 1577.3435424478],\n [1.102e-8, 2.84173992403, 161000.6857376741],\n [6.48e-9, 5.47348203398, 775.522611324],\n [6.08e-9, 1.37894173533, 6438.4962494256],\n [4.99e-9, 4.4164924225, 6286.5989683404],\n [4.16e-9, 0.90332697974, 10977.078804699],\n [4.04e-9, 3.2056726953, 5088.6288397668],\n [3.51e-9, 1.81081728907, 5486.777843175],\n [4.66e-9, 3.65086758149, 7084.8967811152],\n [4.58e-9, 5.38585314743, 149854.4001348079],\n [3.04e-9, 3.51015066341, 796.2980068164],\n [2.66e-9, 6.17413982699, 6836.6452528338],\n [2.81e-9, 1.8387467254, 4694.0029547076],\n [2.62e-9, 1.41420110644, 2146.1654164752],\n [2.64e-9, 3.14103683911, 71430.69561812909],\n [3.19e-9, 5.35037932146, 3154.6870848956],\n [2.38e-9, 2.17695432424, 155.4203994342],\n [2.29e-9, 4.7596958807, 7234.794256242],\n [2.91e-9, 4.61776401638, 4690.4798363586],\n [2.11e-9, 0.21864885298, 4705.7323075436],\n [2.04e-9, 4.22895113488, 1349.8674096588],\n [1.95e-9, 4.58550676556, 529.6909650946],\n [2.55e-9, 2.81442711144, 1748.016413067],\n [1.82e-9, 5.70454011389, 6040.3472460174],\n [1.8e-9, 6.02147727878, 4292.3308329504],\n [1.86e-9, 1.58690991244, 6309.3741697912],\n [1.67e-9, 2.88802733052, 9437.762934887],\n [1.66e-9, 1.99990574734, 8031.0922630584],\n [1.6e-9, 0.04412738495, 2544.3144198834],\n [1.97e-9, 2.01089431842, 1194.4470102246],\n [1.65e-9, 5.78372596774, 83996.84731811189],\n [2.14e-9, 3.38300910371, 7632.9432596502],\n [1.4e-9, 0.36669664351, 10447.3878396044],\n [1.51e-9, 0.95519595275, 6127.6554505572],\n [1.36e-9, 1.48417295645, 2352.8661537718],\n [1.28e-9, 5.48057748834, 951.7184062506],\n [1.26e-9, 5.26866506592, 6279.5527316424],\n [1.27e-9, 3.77552907014, 6812.766815086],\n [1.03e-9, 4.95897533789, 398.1490034082],\n [1.04e-9, 0.70183576826, 1592.5960136328],\n [1.01e-9, 1.14481598642, 3894.1818295422],\n [1.31e-9, 0.76624310306, 553.5694028424],\n [1.09e-9, 5.41063597567, 6256.7775301916],\n [7.8e-10, 5.84775340741, 242.728603974],\n [9.7e-10, 1.94685257714, 11856.2186514245],\n [1e-9, 5.19725292131, 244287.60000722768],\n [7.6e-10, 0.70480774041, 8429.2412664666],\n [8e-10, 6.18430772683, 1059.3819301892],\n [6.8e-10, 5.29561709093, 14143.4952424306],\n [8.5e-10, 5.39487308005, 25132.3033999656],\n [5.5e-10, 5.16874637579, 7058.5984613154],\n [6.3e-10, 0.48494730699, 801.8209311238],\n [5.8e-10, 4.07254840265, 13367.9726311066],\n [5.1e-10, 3.89696552232, 12036.4607348882],\n [5.1e-10, 5.56335232286, 1990.745017041],\n [6e-10, 2.2504659671, 8635.9420037632],\n [4.9e-10, 5.58163417371, 6290.1893969922],\n [5.1e-10, 3.87240194908, 26.2983197998],\n [5.1e-10, 4.19300909995, 7860.4193924392],\n [4.1e-10, 3.97169191582, 10973.55568635],\n [4.1e-10, 3.5708091923, 7079.3738568078],\n [5.6e-10, 2.76959005761, 90955.5516944961],\n [4.2e-10, 1.91461189163, 7477.522860216],\n [4.2e-10, 0.42775891995, 10213.285546211],\n [4.2e-10, 1.06925480488, 709.9330485583],\n [3.8e-10, 6.17935925345, 9917.6968745098],\n [5e-10, 0.81691517401, 11506.7697697936],\n [5.3e-10, 1.45828359397, 233141.3144043615],\n [3.8e-10, 3.32444534628, 5643.1785636774],\n [4.7e-10, 6.21543665927, 6681.2248533996],\n [3.7e-10, 0.3635930998, 10177.2576795336],\n [4.5e-10, 5.29587706357, 10575.4066829418],\n [3.4e-10, 5.63446915337, 6525.8044539654],\n [3.4e-10, 5.36385158519, 4933.2084403326],\n [3.5e-10, 5.36152295839, 25158.6017197654],\n [4.2e-10, 5.08837645072, 11015.1064773348],\n [4.2e-10, 4.22496037505, 88860.05707098669],\n [3.9e-10, 1.99171699618, 6284.0561710596],\n [2.9e-10, 3.1908862817, 11926.2544136688],\n [2.9e-10, 0.14996158324, 12168.0026965746],\n [3e-10, 1.58346276808, 9779.1086761254],\n [2.6e-10, 4.16210340581, 12569.6748183318],\n [3.6e-10, 2.74684637873, 3738.761430108],\n [2.6e-10, 0.7282491532, 1589.0728952838],\n [3.1e-10, 5.34906371821, 143571.32428481648],\n [2.5e-10, 0.10240267494, 22483.84857449259],\n [3e-10, 3.47110495524, 14945.3161735544],\n [2.6e-10, 3.89359701125, 5753.3848848968],\n [2.4e-10, 1.18744224678, 4535.0594369244],\n [3.3e-10, 2.99317143244, 3930.2096962196],\n [2.4e-10, 1.57253767584, 6496.3749454294],\n [2.4e-10, 3.47434797542, 4136.9104335162],\n [2.2e-10, 3.91230073719, 6275.9623029906],\n [2.5e-10, 4.02978941287, 3128.3887650958],\n [2.3e-10, 1.07724492065, 12721.572099417],\n [2.1e-10, 1.89591807148, 16730.4636895958],\n [2.5e-10, 2.42198937013, 5729.506447149],\n [2e-10, 1.78163489101, 17789.845619785],\n [2.1e-10, 0.49258939822, 29088.811415985],\n [2.6e-10, 4.14947806747, 2388.8940204492],\n [2.7e-10, 2.54785812264, 3496.032826134],\n [2e-10, 4.29944129273, 16858.4825329332],\n [2.1e-10, 5.97796936723, 7.1135470008],\n [1.9e-10, 0.80292033311, 16062.1845261168],\n [2.4e-10, 4.89894141052, 17260.1546546904],\n [2.5e-10, 1.37003752175, 6282.0955289232],\n [2.2e-10, 4.92663152168, 18875.525869774],\n [2.3e-10, 5.68902059771, 16460.33352952499],\n [2.3e-10, 3.03021283729, 66567.48586525429],\n [1.6e-10, 3.89713736666, 5331.3574437408],\n [1.6e-10, 5.68562539832, 12559.038152982],\n [1.6e-10, 3.95085099736, 3097.88382272579],\n [1.6e-10, 3.99041783945, 6283.14316029419],\n [2e-10, 6.106439191, 167283.7615876655],\n [1.5e-10, 4.09775914607, 11712.9553182308],\n [1.6e-10, 5.717699407, 17298.1823273262],\n [1.6e-10, 3.28894009404, 5884.9268465832],\n [1.5e-10, 4.4256424368, 13517.8701062334],\n [1.6e-10, 4.4345208093, 6283.0085396886],\n [1.4e-10, 1.44384279999, 4164.311989613],\n [1.4e-10, 4.47380919159, 11790.6290886588],\n [1.4e-10, 4.77646531825, 7342.4577801806],\n [1.1e-10, 2.56768522896, 5481.2549188676],\n [1.1e-10, 1.514433322, 16200.7727245012],\n [1.1e-10, 0.88708889185, 21228.3920235458],\n [1.4e-10, 4.50116508534, 640.8776073822]\n ],\n \"3\": [\n [0.00000144595, 4.27319433901, 6283.0758499914],\n [6.729e-8, 3.91706261708, 12566.1516999828],\n [7.74e-9, 0, 0],\n [2.47e-9, 3.73021571217, 18849.2275499742],\n [3.6e-10, 2.8008140905, 6286.5989683404],\n [3.3e-10, 5.62990083112, 6127.6554505572],\n [1.8e-10, 3.72826142555, 6438.4962494256],\n [1.6e-10, 4.26011484232, 6525.8044539654],\n [1.4e-10, 3.47817116396, 6256.7775301916],\n [1.2e-10, 3.55747379482, 25132.3033999656],\n [1e-10, 4.43995693209, 4705.7323075436],\n [1e-10, 4.2804525547, 83996.84731811189],\n [9e-11, 5.36457057335, 6040.3472460174],\n [8e-11, 1.78458957263, 5507.5532386674],\n [9e-11, 0.4727519993, 6279.5527316424],\n [9e-11, 1.34741231639, 6309.3741697912],\n [9e-11, 0.77092900708, 5729.506447149],\n [7e-11, 3.50146897332, 7058.5984613154],\n [5e-11, 2.890710617, 775.522611324],\n [6e-11, 2.36514111314, 6836.6452528338]\n ],\n \"4\": [\n [3.858e-8, 2.56389016346, 6283.0758499914],\n [3.06e-9, 2.26911740541, 12566.1516999828],\n [5.3e-10, 3.44031471924, 5573.1428014331],\n [1.5e-10, 2.03136359366, 18849.2275499742],\n [1.3e-10, 2.05688873673, 77713.7714681205],\n [7e-11, 4.4121885448, 161000.6857376741],\n [4e-11, 5.33854414781, 6438.4962494256],\n [6e-11, 3.81514213664, 149854.4001348079],\n [4e-11, 4.26602478239, 6127.6554505572]\n ],\n \"5\": [\n [8.6e-10, 1.21805304895, 6283.0758499914],\n [1.2e-10, 0.65572878044, 12566.1516999828]\n ]\n },\n name: \"earth\",\n type: \"B\"\n};\n\nexports[\"default\"] = m;\n", "'use strict';\n\nObject.defineProperty(exports, '__esModule', { value: true });\n\nvar _vsop87Bearth = require('astronomia/data/vsop87Bearth');\n\nfunction _interopDefaultLegacy (e) { return e && typeof e === 'object' && 'default' in e ? e : { 'default': e }; }\n\nvar _vsop87Bearth__default = /*#__PURE__*/_interopDefaultLegacy(_vsop87Bearth);\n\nconst vsop87Bearth = _vsop87Bearth__default[\"default\"];\n\nexports.vsop87Bearth = vsop87Bearth;\n", "'use strict';\n\nvar astronomia = require('astronomia');\nvar vsop87Bearth = require('./vsop87Bearth.cjs');\nvar moment = require('moment-timezone');\nvar CalDate = require('caldate');\nvar CalEvent = require('./CalEvent.cjs');\n\nfunction _interopDefaultLegacy (e) { return e && typeof e === 'object' && 'default' in e ? e : { 'default': e }; }\n\nvar moment__default = /*#__PURE__*/_interopDefaultLegacy(moment);\nvar CalDate__default = /*#__PURE__*/_interopDefaultLegacy(CalDate);\n\nconst earth = new astronomia.planetposition.Planet(vsop87Bearth.vsop87Bearth);\n\nclass Equinox extends CalEvent {\n /**\n * @param {object} [opts]\n * @param {string} opts.season - type of season (spring|summer|autumn|winter)\n * @param {number|string} opts.offset - offset in days\n */\n constructor (opts) {\n opts = opts || {};\n super(opts);\n\n this._season = opts.season;\n this._timezone = opts.timezone || 'GMT';\n }\n\n inYear (year) {\n let jde;\n switch (this._season) {\n case 'march': {\n jde = astronomia.solstice.march2(year, earth);\n break\n }\n case 'june': {\n jde = astronomia.solstice.june2(year, earth);\n break\n }\n case 'september': {\n jde = astronomia.solstice.september2(year, earth);\n break\n }\n case 'december': {\n jde = astronomia.solstice.december2(year, earth);\n break\n }\n }\n\n const str = new astronomia.julian.Calendar().fromJDE(jde).toDate().toISOString();\n let date;\n if (/^[+-]\\d{2}:\\d{2}?$/.test(this._timezone)) { // for '+08:00' formats\n date = moment__default[\"default\"](str).utcOffset(this._timezone);\n } else { // for 'Asia/Shanghai' formats\n date = moment__default[\"default\"](str).tz(this._timezone); // move to timezone\n }\n\n const floorDate = {\n year,\n month: date.month() + 1,\n day: date.date()\n };\n\n const d = new CalDate__default[\"default\"](floorDate).setOffset(this.offset);\n this.dates.push(d);\n return this\n }\n}\n\nmodule.exports = Equinox;\n", "'use strict';\n\nObject.defineProperty(exports, '__esModule', { value: true });\n\nvar _vsop87Bearth = require('astronomia/data/vsop87Bearth');\n\nfunction _interopDefaultLegacy (e) { return e && typeof e === 'object' && 'default' in e ? e : { 'default': e }; }\n\nvar _vsop87Bearth__default = /*#__PURE__*/_interopDefaultLegacy(_vsop87Bearth);\n\nconst vsop87Bearth = _vsop87Bearth__default[\"default\"];\n\nexports.vsop87Bearth = vsop87Bearth;\n", "'use strict';\n\nvar astronomia = require('astronomia');\nvar vsop87Bearth = require('./vsop87Bearth.cjs');\n\n/**\n * @copyright 2016 commenthol\n * @license MIT\n */\n\nconst earth = new astronomia.planetposition.Planet(vsop87Bearth.vsop87Bearth);\nconst lunarOffset = astronomia.moonphase.meanLunarMonth / 2;\nconst p = 180 / Math.PI;\n\n// Start of Chinese Calendar in 2636 BCE by Chalmers\nconst epochY = -2636;\nconst epoch = new astronomia.julian.CalendarGregorian(epochY, 2, 15).toJDE();\n\nfunction toYear (jde) {\n return new astronomia.julian.CalendarGregorian().fromJDE(jde).toYear()\n}\n\n// prevent rounding errors\nfunction toFixed (val, e) {\n return parseFloat(val.toFixed(e), 10)\n}\n\nclass CalendarChinese {\n /**\n * constructor\n *\n * @param {Number|Array|Object} cycle - chinese 60 year cicle; if `{Array}` than `[cycle, year, ..., day]`\n * @param {Number} year - chinese year of cycle\n * @param {Number} month - chinese month\n * @param {Number} leap - `true` if leap month\n * @param {Number} day - chinese day\n */\n constructor (cycle, year, month, leap, day) {\n this.set(cycle, year, month, leap, day);\n\n this._epochY = epochY;\n this._epoch = epoch;\n this._cache = { // cache for results\n lon: {},\n sue: {},\n ny: {}\n };\n }\n\n /**\n * set a new chinese date\n *\n * @param {Number|Array|Object} cycle - chinese 60 year cicle; if `{Array}` than `[cycle, year, ..., day]`\n * @param {Number} year - chinese year of cycle\n * @param {Number} month - chinese month\n * @param {Number} leap - `true` if leap month\n * @param {Number} day - chinese day\n */\n set (cycle, year, month, leap, day) {\n if (cycle instanceof CalendarChinese) {\n this.cycle = cycle.cycle;\n this.year = cycle.year;\n this.month = cycle.month;\n this.leap = cycle.leap;\n this.day = cycle.day;\n } else if (Array.isArray(cycle)) {\n this.cycle = cycle[0];\n this.year = cycle[1];\n this.month = cycle[2];\n this.leap = cycle[3];\n this.day = cycle[4];\n } else {\n this.cycle = cycle;\n this.year = year;\n this.month = month;\n this.leap = leap;\n this.day = day;\n }\n return this\n }\n\n /**\n * returns chinese date\n * @returns {Array}\n */\n get () {\n return [this.cycle, this.year, this.month, this.leap, this.day]\n }\n\n /**\n * get Gregorian year from Epoch / Cycle\n * @return {Number} year\n */\n yearFromEpochCycle () {\n return this._epochY + (this.cycle - 1) * 60 + (this.year - 1)\n }\n\n /**\n * convert gregorian date to chinese calendar date\n *\n * @param {Number} year - (int) year in Gregorian or Julian Calendar\n * @param {Number} month - (int)\n * @param {Number} day - needs to be in correct (chinese) timezone\n * @return {Object} this\n */\n fromGregorian (year, month, day) {\n const j = this.midnight(new astronomia.julian.CalendarGregorian(year, month, day).toJDE());\n if (month === 1 && day <= 20) year--; // chinese new year never starts before 20/01\n this._from(j, year);\n return this\n }\n\n /**\n * convert date to chinese calendar date\n *\n * @param {Date} date - javascript date object\n * @return {Object} this\n */\n fromDate (date) {\n const j = this.midnight(new astronomia.julian.CalendarGregorian().fromDate(date).toJDE());\n this._from(j, date.getFullYear());\n return this\n }\n\n /**\n * convert JDE to chinese calendar date\n *\n * @param {Number} jde - date in JDE\n * @return {Object} this\n */\n fromJDE (jde) {\n const j = this.midnight(jde);\n const gc = new astronomia.julian.CalendarGregorian().fromJDE(j);\n if (gc.month === 1 && gc.day < 20) gc.year--; // chinese new year never starts before 20/01\n this._from(j, gc.year);\n return this\n }\n\n /**\n * common conversion from JDE, year to chinese date\n *\n * @private\n * @param {Number} j - date in JDE\n * @param {Number} year - gregorian year\n */\n _from (j, year) {\n let ny = this.newYear(year);\n if (ny > j) {\n ny = this.newYear(year - 1);\n }\n let nm = this.previousNewMoon(j);\n if (nm < ny) {\n nm = ny;\n }\n\n const years = 1.5 + (ny - this._epoch) / astronomia.base.BesselianYear;\n this.cycle = 1 + Math.trunc((years - 1) / 60);\n this.year = 1 + Math.trunc((years - 1) % 60);\n\n this.month = this.inMajorSolarTerm(nm).term;\n const m = Math.round((nm - ny) / astronomia.moonphase.meanLunarMonth);\n if (m === 0) {\n this.month = 1;\n this.leap = false;\n } else {\n this.leap = this.isLeapMonth(nm);\n }\n\n if (m > this.month) {\n this.month = m;\n } else if (this.leap) {\n this.month--;\n }\n\n this.day = 1 + Math.trunc(toFixed(j, 3) - toFixed(nm, 3));\n }\n\n /**\n * convert chinese date to gregorian date\n *\n * @param {Number} [gyear] - (int) gregorian year\n * @return {Object} date in gregorian (preleptic) calendar; Timezone is Standard Chinese / Bejing Time\n * {Number} year - (int)\n * {Number} month - (int)\n * {Number} day - (int)\n */\n toGregorian (gyear) {\n const jde = this.toJDE(gyear);\n const gc = new astronomia.julian.CalendarGregorian().fromJDE(jde + 0.5); // add 0.5 as day get truncated\n return {\n year: gc.year,\n month: gc.month,\n day: Math.trunc(gc.day)\n }\n }\n\n /**\n * convert chinese date to Date\n *\n * @param {Number} [gyear] - (int) gregorian year\n * @return {Date} javascript date object in gregorian (preleptic) calendar\n */\n toDate (gyear) {\n const jde = this.toJDE(gyear);\n return new astronomia.julian.CalendarGregorian().fromJDE(toFixed(jde, 4)).toDate()\n }\n\n /**\n * convert chinese date to JDE\n *\n * @param {Number} [gyear] - (int) gregorian year\n * @return {Number} date in JDE\n */\n toJDE (gyear) {\n const years = gyear || this.yearFromEpochCycle();\n const ny = this.newYear(years);\n let nm = ny;\n if (this.month > 1) {\n nm = this.previousNewMoon(ny + this.month * 29);\n const st = this.inMajorSolarTerm(nm).term;\n const lm = this.isLeapMonth(nm);\n\n if (st > this.month) {\n nm = this.previousNewMoon(nm - 1);\n } else if (st < this.month || (lm && !this.leap)) {\n nm = this.nextNewMoon(nm + 1);\n }\n }\n if (this.leap) {\n nm = this.nextNewMoon(nm + 1);\n }\n const jde = nm + this.day - 1;\n return jde\n }\n\n /**\n * timeshift to UTC\n *\n * @param {CalendarGregorian} gcal - gregorian calendar date\n * @return {Number} timeshift in fraction of day\n */\n timeshiftUTC (gcal) {\n if (gcal.toYear() >= 1929) {\n return 8 / 24 // +8:00:00h Standard China time zone (120\u00B0 East)\n }\n return 1397 / 180 / 24 // +7:45:40h Beijing (116\u00B025\u00B4 East)\n }\n\n /**\n * time/date at midnight - truncate `jde` to actual day\n *\n * @param {Number} jde - julian ephemeris day\n * @return {Number} truncated jde\n */\n midnight (jde) {\n const gcal = new astronomia.julian.CalendarGregorian().fromJDE(jde);\n const ts = 0.5 - this.timeshiftUTC(gcal);\n let mn = Math.trunc(gcal.toJD() - ts) + ts;\n mn = gcal.fromJD(mn).toJDE();\n if (toFixed(jde, 5) === toFixed(mn, 5) + 1) {\n return jde\n }\n return mn\n }\n\n /**\n * get major solar term `Z1...Z12` for a given date in JDE\n *\n * @param {Number} jde - date of new moon\n * @returns {Number} major solar term part of that month\n */\n inMajorSolarTerm (jde) {\n const lon = this._cache.lon[jde] || astronomia.solar.apparentVSOP87(earth, jde).lon;\n this._cache.lon[jde] = lon;\n const lonDeg = lon * p - 1e-13;\n const term = (2 + Math.floor(lonDeg / 30)) % 12 + 1;\n return { term, lon: lonDeg }\n }\n\n /**\n * Test if date `jde` is inside a leap month\n * `jde` and previous new moon need to have the same major solar term\n *\n * @param {Number} jde - date of new moon\n * @returns {Boolean} `true` if previous new moon falls into same solar term\n */\n isLeapMonth (jde) {\n const t1 = this.inMajorSolarTerm(jde);\n const next = this.nextNewMoon(this.midnight(jde + lunarOffset));\n const t2 = this.inMajorSolarTerm(next);\n const r = (t1.term === t2.term);\n return r\n }\n\n /**\n * next new moon since `jde`\n *\n * @param {Number} jde - date in julian ephemeris days\n * @return {Number} jde at midnight\n */\n nextNewMoon (jde) {\n let nm = this.midnight(astronomia.moonphase.newMoon(toYear(jde)));\n let cnt = 0;\n while (nm < jde && cnt++ < 4) {\n nm = this.midnight(astronomia.moonphase.newMoon(toYear(jde + cnt * lunarOffset)));\n }\n return nm\n }\n\n /**\n * next new moon since `jde`\n *\n * @param {Number} jde - date in julian ephemeris days\n * @return {Number} jde at midnight\n */\n previousNewMoon (jde) {\n let nm = this.midnight(astronomia.moonphase.newMoon(toYear(jde)));\n let cnt = 0;\n while (nm > jde && cnt++ < 4) {\n nm = this.midnight(astronomia.moonphase.newMoon(toYear(jde - cnt * lunarOffset)));\n }\n return nm\n }\n\n /**\n * chinese new year for a given gregorian year\n *\n * @param {Number} gyear - gregorian year (int)\n * @param {Number} jde at midnight\n */\n newYear (gyear) {\n gyear = Math.trunc(gyear);\n if (this._cache.ny[gyear]) return this._cache.ny[gyear]\n\n const sue1 = this._cache.sue[gyear - 1] || astronomia.solstice.december2(gyear - 1, earth);\n const sue2 = this._cache.sue[gyear] || astronomia.solstice.december2(gyear, earth);\n this._cache.sue[gyear - 1] = sue1;\n this._cache.sue[gyear] = sue2;\n\n const m11n = this.previousNewMoon(this.midnight(sue2 + 1));\n const m12 = this.nextNewMoon(this.midnight(sue1 + 1));\n const m13 = this.nextNewMoon(this.midnight(m12 + lunarOffset));\n this.leapSui = Math.round((m11n - m12) / astronomia.moonphase.meanLunarMonth) === 12;\n let ny = m13;\n\n if (this.leapSui && (this.isLeapMonth(m12) || this.isLeapMonth(m13))) {\n ny = this.nextNewMoon(this.midnight(m13 + astronomia.moonphase.meanLunarMonth / 2));\n }\n this._cache.ny[gyear] = ny;\n return ny\n }\n\n /**\n * get solar term from solar longitude\n *\n * @param {Number} term - ji\u00E9q\u00EC solar term 1 .. 24\n * @param {Number} [gyear] - (int) gregorian year\n * @returns {Number} jde at midnight\n */\n solarTerm (term, gyear) {\n if (gyear && term <= 3) gyear--;\n const years = gyear || this.yearFromEpochCycle();\n const lon = (((term + 20) % 24) * 15) % 360;\n let st = astronomia.solstice.longitude(years, earth, lon / p);\n st = this.midnight(st);\n return st\n }\n\n /**\n * get major solar term\n *\n * @param {Number} term - zh\u014Dngq\u00EC solar term Z1 .. Z12\n * @param {Number} [gyear] - (int) gregorian year\n * @returns {Number} jde at midnight\n */\n majorSolarTerm (term, gyear) {\n return this.solarTerm(term * 2, gyear)\n }\n\n /**\n * get minor solar term\n *\n * @param {Number} term - ji\u00E9q\u00EC solar term J1 .. J12\n * @param {Number} [gyear] - (int) gregorian year\n * @returns {Number} jde at midnight\n */\n minorSolarTerm (term, gyear) {\n return this.solarTerm(term * 2 - 1, gyear)\n }\n\n /**\n * Q\u0131\u0304ngm\u00EDng - Pure brightness Festival\n *\n * @param {Number} [gyear] - (int) gregorian year\n * @returns {Number} jde at midnight\n */\n qingming (gyear) {\n return this.solarTerm(5, gyear)\n }\n}\n\nmodule.exports = CalendarChinese;\n", "'use strict';\n\nvar astronomia = require('astronomia');\nvar Chinese = require('./Chinese.cjs');\n\n/**\n * @copyright 2016 commenthol\n * @license MIT\n */\n\n// Start of Korean Calendar in 2333 BCE (\uB2E8\uAD70\uAE30\uC6D0 http://ko.wikipedia.org/wiki/\uB2E8\uAE30)\nconst epochY = -2333;\nconst epoch = new astronomia.julian.CalendarGregorian(epochY, 1, 27).toJDE();\n\n/**\n * change of timezone shifts during the last century\n * @see https://en.wikipedia.org/wiki/Time_in_South_Korea\n */\nconst UTC_DATES = [\n {\n date: new Date('1961-10-09T15:00:00.000Z'), // 1961-10-10T00:00:00+0900\n shift: 9 / 24\n }, // +9:00:00h (135\u00B0 East)\n {\n date: new Date('1954-03-20T15:30:00.000Z'), // 1954-03-21T00:00:00+0830\n shift: 8.5 / 24\n },\n {\n date: new Date('1911-12-31T15:00:00.000Z'), // 1912-01-01T00:00:00+0900\n shift: 9 / 24\n },\n {\n date: new Date('1908-03-31T15:30:00.000Z'), // 1908-04-01T00:00:00+0830\n shift: 8.5 / 24\n }\n];\n\nclass CalendarKorean extends Chinese {\n constructor (cycle, year, month, leap, day) {\n super(cycle, year, month, leap, day);\n\n this._epochY = epochY;\n this._epoch = epoch;\n }\n\n /**\n * timeshift to UTC\n *\n * @param {CalendarGregorian} gcal - gregorian calendar date\n * @return {Number} timeshift in fraction of day\n */\n timeshiftUTC (gcal) {\n const date = gcal.toDate();\n for (const i in UTC_DATES) {\n if (date >= UTC_DATES[i].date) {\n return UTC_DATES[i].shift\n }\n }\n return 3809 / 450 / 24 // +8:27:52h Seoul City Hall 126\u00B058'E\n }\n}\n\nmodule.exports = CalendarKorean;\n", "'use strict';\n\nvar Chinese = require('./Chinese.cjs');\n\n/**\n * @copyright 2016 commenthol\n * @license MIT\n */\n\nclass CalendarVietnamese extends Chinese {\n /**\n * timeshift to UTC\n *\n * @param {CalendarGregorian} gcal - gregorian calendar date\n * @return {Number} timeshift in fraction of day\n */\n timeshiftUTC (gcal) {\n if (gcal.toYear() >= 1968) {\n return 7 / 24 // +7:00:00h\n }\n return 8 / 24 // +8:00:00h Standard China time zone (120\u00B0 East)\n }\n}\n\nmodule.exports = CalendarVietnamese;\n", "'use strict';\n\nvar Chinese = require('./Chinese.cjs');\n\n/**\n * @copyright 2016 commenthol\n * @license MIT\n */\n\n/**\n * @see http://law.e-gov.go.jp/htmldata/M19/M19CO051.html\n */\nconst UTC_DATES = [\n {\n date: new Date('1888-02-11T15:00:00.000Z'), // 1888-02-12T00:00:00+0900\n shift: 9 / 24\n } // +9:00:00h (135\u00B0 East) Japanese standard meridian\n];\n\n/**\n * Note: I could not find details about the epoch(s) for the year zero of the\n * Japanese calendar dating before 1873. Therefore this calendar uses (wrongly)\n * the Chinese epoch.\n *\n * According to the eras are:\n *\n * Yayoi 300 BC \u2013 250 AD\n * Kofun 250 \u2013 538\n * Asuka 538 \u2013 710\n * Nara 710 \u2013 794\n * Heian 794 \u2013 1185\n * Kamakura 1185 \u2013 1333\n * Kenmu Restoration 1333 \u2013 1336\n * Muromachi 1336 \u2013 1573\n * Azuchi\u2013Momoyama 1568 \u2013 1603\n * Edo 1603 \u2013 1868\n * Meiji 1868 \u2013 1912\n * Taish\u014D 1912 \u2013 1926\n * Sh\u014Dwa 1926 \u2013 1989\n * Heisei 1989 \u2013 present\n *\n * Unfortunately the linking from era to calendar era (especially to the Chinese\n * pre 1873 one) is unknown to me.\n */\n\nclass CalendarJapanese extends Chinese {\n /**\n * timeshift to UTC\n *\n * @param {CalendarGregorian} gcal - gregorian calendar date\n * @return {Number} timeshift in fraction of day\n */\n timeshiftUTC (gcal) {\n const date = gcal.toDate();\n for (const i in UTC_DATES) {\n if (date >= UTC_DATES[i].date) {\n return UTC_DATES[i].shift\n }\n }\n return 4193 / 450 / 24 // +9:19:04h (139\u00B046'E)\n }\n}\n\nmodule.exports = CalendarJapanese;\n", "'use strict';\n\nObject.defineProperty(exports, '__esModule', { value: true });\n\nvar Chinese = require('./Chinese.cjs');\nvar Korean = require('./Korean.cjs');\nvar Vietnamese = require('./Vietnamese.cjs');\nvar Japanese = require('./Japanese.cjs');\n\n\n\nexports.CalendarChinese = Chinese;\nexports.CalendarKorean = Korean;\nexports.CalendarVietnamese = Vietnamese;\nexports.CalendarJapanese = Japanese;\n", "'use strict';\n\nvar dateChinese = require('date-chinese');\nvar CalEvent = require('./CalEvent.cjs');\nvar CalDate = require('caldate');\n\nfunction _interopDefaultLegacy (e) { return e && typeof e === 'object' && 'default' in e ? e : { 'default': e }; }\n\nvar CalDate__default = /*#__PURE__*/_interopDefaultLegacy(CalDate);\n\nclass Chinese extends CalEvent {\n /**\n * @param {object} [opts]\n */\n constructor (opts) {\n opts = opts || {};\n super(opts);\n switch (opts.fn) {\n case 'chinese':\n this.cal = new dateChinese.CalendarChinese();\n break\n case 'korean':\n this.cal = new dateChinese.CalendarKorean();\n break\n case 'vietnamese':\n this.cal = new dateChinese.CalendarVietnamese();\n break\n }\n }\n\n inYear (year) {\n let d;\n let jde;\n let date;\n const opts = this.opts;\n if (opts.solarterm) {\n jde = this.cal.solarTerm(opts.solarterm, year);\n date = this.cal.fromJDE(jde).toGregorian();\n d = new CalDate__default[\"default\"](date).setOffset(opts.day - 1);\n } else {\n this.cal.set(opts.cycle, opts.year, opts.month, opts.leapMonth, opts.day);\n jde = this.cal.toJDE(year);\n date = this.cal.fromJDE(jde).toGregorian();\n d = new CalDate__default[\"default\"](date);\n }\n\n this.dates.push(d);\n return this\n }\n}\n\nmodule.exports = Chinese;\n", "'use strict';\n\nObject.defineProperty(exports, '__esModule', { value: true });\n\n/**\n * bengali names were taken from https://github.com/nuhil/bangla-calendar - MIT licensed\n */\n\nconst monthNames = ['\u09AC\u09C8\u09B6\u09BE\u0996', '\u099C\u09CD\u09AF\u09C8\u09B7\u09CD\u09A0', '\u0986\u09B7\u09BE\u09A2\u09BC', '\u09B6\u09CD\u09B0\u09BE\u09AC\u09A3', '\u09AD\u09BE\u09A6\u09CD\u09B0', '\u0986\u09B6\u09CD\u09AC\u09BF\u09A8', '\u0995\u09BE\u09B0\u09CD\u09A4\u09BF\u0995', '\u0985\u0997\u09CD\u09B0\u09B9\u09BE\u09AF\u09BC\u09A3', '\u09AA\u09CC\u09B7', '\u09AE\u09BE\u0998', '\u09AB\u09BE\u09B2\u09CD\u0997\u09C1\u09A8', '\u099A\u09C8\u09A4\u09CD\u09B0'];\nconst weekDays = ['\u09B0\u09AC\u09BF\u09AC\u09BE\u09B0', '\u09B8\u09CB\u09AE\u09AC\u09BE\u09B0', '\u09AE\u0999\u09CD\u0997\u09B2\u09AC\u09BE\u09B0', '\u09AC\u09C1\u09A7\u09AC\u09BE\u09B0', '\u09AC\u09C3\u09B9\u09B8\u09CD\u09AA\u09A4\u09BF\u09AC\u09BE\u09B0', '\u09B6\u09C1\u0995\u09CD\u09B0\u09AC\u09BE\u09B0', '\u09B6\u09A8\u09BF\u09AC\u09BE\u09B0'];\nconst seasonNames = ['\u0997\u09CD\u09B0\u09C0\u09B7\u09CD\u09AE', '\u09AC\u09B0\u09CD\u09B7\u09BE', '\u09B6\u09B0\u09CE', '\u09B9\u09C7\u09AE\u09A8\u09CD\u09A4', '\u09B6\u09C0\u09A4', '\u09AC\u09B8\u09A8\u09CD\u09A4'];\n\nconst digits = ['\u09E6', '\u09E7', '\u09E8', '\u09E9', '\u09EA', '\u09EB', '\u09EC', '\u09ED', '\u09EE', '\u09EF'];\n\nlet banglas;\n\nconst createBanglas = () => {\n banglas = digits.reduce((o, c, i) => {\n o[c] = i;\n return o\n }, {});\n};\n\nconst digitToBangla = number => String(number).replace(/\\d/g, digit => digits[digit]);\n\nconst banglaToDigit = bangla => {\n if (!banglas) createBanglas(); // memoize\n const month = monthNames.indexOf(bangla);\n const str = month !== -1\n ? month + 1\n : String(bangla).replace(/./g, bangla => {\n const r = banglas[bangla];\n return r !== undefined ? r : bangla\n });\n return Number(str)\n};\n\nconst weekDay = day => weekDays[day];\n\nconst monthName = month => monthNames[month - 1];\n\nconst seasonName = month => seasonNames[Math.floor((month - 1) / 2)]; // ('\u09AA\u09CC\u09B7' + '\u09AE\u09BE\u0998') = '\u09B6\u09C0\u09A4'. Every consecutive two index in 'banglaMonths' indicates a single index in 'banglaSeasons'.\n\nexports.banglaToDigit = banglaToDigit;\nexports.digitToBangla = digitToBangla;\nexports.monthName = monthName;\nexports.seasonName = seasonName;\nexports.weekDay = weekDay;\n", "'use strict';\n\nObject.defineProperty(exports, '__esModule', { value: true });\n\nvar convert = require('./convert.cjs');\n\n/**\n * @copyright 2018-present commenthol\n * @license MIT\n */\n\nconst YEAR0 = 593;\nconst MILLISECONDS_PER_DAY = 86400000;\nconst monthDaysNorm = [31, 31, 31, 31, 31, 30, 30, 30, 30, 30, 30, 30];\nconst monthDaysLeap = [31, 31, 31, 31, 31, 30, 30, 30, 30, 30, 31, 30];\n\nconst isLeapYear = (year) => ((year % 4 === 0) && (year % 100 !== 0)) || (year % 400 === 0);\nconst UTC6 = 6; // timezone offset UTC+6\nconst toEpoch = year => Date.UTC(year, 3, 13, UTC6);\n\nclass CalendarBengaliRevised {\n /**\n * @constructor\n * @param {Number|String} year - bengali year\n * @param {Number|String} month - (int) 1...12\n * @param {Number|String} day - 1...31\n * @return {Object} this\n */\n constructor (year, month, day) {\n Object.assign(this, {\n year: convert.banglaToDigit(year),\n month: convert.banglaToDigit(month) || 1,\n day: convert.banglaToDigit(day) || 1\n });\n }\n\n /**\n * convert gregorian date to bengali calendar date\n * @param {Number} year - (int) year in Gregorian Calendar\n * @param {Number} month - (int)\n * @param {Number} day - (int)\n * @return {Object} this\n */\n fromGregorian (year, month, day) {\n const monthDays = isLeapYear(year)\n ? monthDaysLeap\n : monthDaysNorm;\n\n let _year = year;\n if (month < 4 || (month === 4 && day < 14)) {\n _year -= 1;\n }\n this.year = _year - YEAR0;\n\n const date = Date.UTC(year, month - 1, day, UTC6);\n let days = Math.floor((date - toEpoch(_year)) / MILLISECONDS_PER_DAY);\n\n for (let i = 0; i < monthDays.length; i++) {\n if (days <= monthDays[i]) {\n this.month = i + 1;\n break\n }\n days -= monthDays[i];\n }\n\n this.day = days;\n return this\n }\n\n /**\n * convert date to bengali calendar date\n * @param {Date} date - javascript date object - uses local date\n * @return {Object} this\n */\n fromDate (date) {\n return this.fromGregorian(date.getFullYear(), date.getMonth() + 1, date.getDate())\n }\n\n /**\n * convert bengali date to gregorian date\n * @return {Object} date in gregorian (preleptic) calendar\n * {Number} year - (int)\n * {Number} month - (int) 1...12\n * {Number} day - (int) 1...31\n */\n toGregorian () {\n const date = this.toDate();\n return {\n year: date.getUTCFullYear(),\n month: date.getUTCMonth() + 1,\n day: date.getUTCDate()\n }\n }\n\n /**\n * convert bengali date to Date\n * @return {Date} javascript date object in gregorian (preleptic) calendar\n */\n toDate () {\n const year = this.year + YEAR0;\n const epoch = toEpoch(year);\n const _year = this.month > 10 ? year + 1 : year;\n const monthDays = isLeapYear(_year)\n ? monthDaysLeap\n : monthDaysNorm;\n\n let days = this.day;\n for (let i = 0; i < this.month - 1; i++) {\n days += monthDays[i];\n }\n const date = new Date(days * MILLISECONDS_PER_DAY + epoch);\n return date\n }\n\n /**\n * format date in bengali\n * @param {String} formatStr - string formatter\n *\n * | Input | Description |\n * | ----- | ------------ |\n * | Y | Year with any number of digits and sign |\n * | Q | Season Name |\n * | M | Month number |\n * | MMMM | Month name |\n * | D | Day of month |\n * | dddd | Day name |\n *\n * @return {String}\n */\n format (formatStr) {\n formatStr = formatStr || 'D M, Y';\n if (/dddd/.test(formatStr)) {\n const date = this.toDate();\n formatStr = formatStr.replace(/dddd/g, convert.weekDay(date.getUTCDay()));\n }\n return formatStr\n .replace(/Y/g, convert.digitToBangla(this.year))\n .replace(/Q/g, convert.seasonName(this.month))\n .replace(/MMMM/g, convert.monthName(this.month))\n .replace(/M/g, convert.digitToBangla(this.month))\n .replace(/D/g, convert.digitToBangla(this.day))\n }\n}\n\nexports.CalendarBengaliRevised = CalendarBengaliRevised;\nexports[\"default\"] = CalendarBengaliRevised;\n", "'use strict';\n\nvar CalBengali = require('date-bengali-revised');\nvar CalDate = require('caldate');\nvar CalEvent = require('./CalEvent.cjs');\n\nfunction _interopDefaultLegacy (e) { return e && typeof e === 'object' && 'default' in e ? e : { 'default': e }; }\n\nvar CalBengali__default = /*#__PURE__*/_interopDefaultLegacy(CalBengali);\nvar CalDate__default = /*#__PURE__*/_interopDefaultLegacy(CalDate);\n\nclass BengaliRevised extends CalEvent {\n /**\n * @param {object} [opts]\n */\n constructor (opts) {\n opts = opts || {};\n super(opts);\n }\n\n inYear (year) {\n const opts = this.opts;\n const date = new CalBengali__default[\"default\"](year - 593, opts.month, opts.day).toGregorian();\n const d = new CalDate__default[\"default\"](date);\n this.dates.push(d);\n return this\n }\n}\n\nmodule.exports = BengaliRevised;\n", "'use strict'\n\nconst CalEvent = require('./CalEvent.cjs')\nconst Easter = require('./Easter.cjs')\n\n// --- pre-processor instructions for prepin ---\n// #ifndef nojulian\nconst Julian = require('./Julian.cjs')\n// #endif\n// #ifndef nojalaali\nconst Jalaali = require('./Jalaali.cjs')\n// #endif\n// #ifndef nohebrew\nconst Hebrew = require('./Hebrew.cjs')\n// #endif\n// #ifndef noislamic\nconst Hijri = require('./Hijri.cjs')\n// #endif\n// #ifndef noequinox\nconst Equinox = require('./Equinox.cjs')\n// #endif\n// #ifndef nochinese\nconst Chinese = require('./Chinese.cjs')\n// #endif\n// #ifndef nobengali\nconst BengaliRevised = require('./BengaliRevised.cjs')\n// #endif\n\n/* eslint spaced-comment:0 */\n\nclass CalEventFactory {\n constructor (opts) {\n switch (opts.fn) {\n case 'easter':\n return new Easter(opts)\n // #ifndef nojulian\n case 'julian':\n return new Julian(opts)\n // #endif\n // #ifndef nohebrew\n case 'hebrew':\n return new Hebrew(opts)\n // #endif\n // #ifndef noislamic\n case 'islamic':\n return new Hijri(opts)\n // #endif\n // #ifndef nojalaali\n case 'jalaali':\n return new Jalaali(opts)\n // #endif\n // #ifndef noequinox\n case 'equinox':\n return new Equinox(opts)\n // #endif\n // #ifndef nochinese\n case 'chinese':\n case 'korean':\n case 'vietnamese':\n return new Chinese(opts)\n // #endif\n // #ifndef nobengali\n case 'bengali-revised':\n return new BengaliRevised(opts)\n // #endif\n default:\n return new CalEvent(opts)\n }\n }\n}\n\nmodule.exports = CalEventFactory\n", "'use strict';\n\nvar Parser = require('./Parser.cjs');\nvar Rule = require('./Rule.cjs');\nvar PostRule = require('./PostRule.cjs');\nvar CalEventFactory = require('./CalEventFactory.cjs');\n\n/**\n * handles one rule\n */\nclass DateFn {\n /**\n * @param {string} rule - unparsed rule\n * @param {array} holidays - all holidays rules (required for bridge day calculations)\n */\n constructor (ruleStr, holidays) {\n const parser = new Parser();\n this.ruleStr = ruleStr;\n this.rules = parser.parse(ruleStr);\n this.ok = !parser.error;\n this.holidays = holidays;\n this.opts = holidays ? holidays[ruleStr] : {};\n this.event = undefined;\n this.cache = new Map();\n }\n\n /**\n * @param {number} year\n * @returns {this}\n */\n inYear (year) {\n if (this.cache.has(year)) {\n this.event = this.cache.get(year);\n return this\n }\n\n let ruleFn; // current rule\n const postProc = new PostRule(this.ruleStr, this.opts, this.holidays);\n\n this.rules.forEach((rule) => {\n if (rule.fn) {\n const calEvent = new CalEventFactory(rule)\n .inYear(year - 1) // run over neighboring dates to catch overlaps\n .inYear(year)\n .inYear(year + 1);\n postProc.push(calEvent);\n ruleFn = new Rule(calEvent);\n } else {\n if (ruleFn.resolve(rule)) {\n postProc.resolve(rule, year);\n }\n }\n });\n\n const event = postProc.getEvent(year);\n this.cache.set(year, event);\n\n this.event = event;\n return this\n }\n\n get (timezone) {\n return this.event.get(timezone)\n }\n}\n\nmodule.exports = DateFn;\n", "'use strict';\n\nObject.defineProperty(exports, '__esModule', { value: true });\n\nvar utils = require('./internal/utils.cjs');\n\n/**\n * Holiday Rule\n * Apart from `rule` and `name` other options may be set\n * @constructor\n * @param {object} ruleObj\n * @param {string} ruleObj.rule - the rule string\n * @param {string|object} [ruleObj.name] - the name of the holiday, plain or with i18n\n * @param {string} [ruleObj.type] - type of holiday\n * @param {boolean} [ruleObj.substitute] - substitute holiday\n * @param {object[]} [ruleObj.active] - active `[{from?: str, to?: str}]`\n */\nclass HolidayRule {\n constructor (ruleObj) {\n const { rule, fn, opts, ...other } = ruleObj;\n Object.assign(this, { rule, ...other });\n }\n\n /**\n * disable rule in year (month)\n * @param {number} year\n * @param {number} [month] - 1..12\n */\n disableIn (year, month) {\n if (!utils.toNumber(year)) return\n month = month < 1 && month > 12\n ? undefined\n : month < 10 ? '0' + Number(month) : month;\n const dateStr = [year, month].filter(Boolean).join('-');\n this.disable = (this.disable || []).concat(dateStr).sort();\n }\n}\n\nexports.HolidayRule = HolidayRule;\n", "'use strict';\n\nObject.defineProperty(exports, '__esModule', { value: true });\n\nvar CalDate = require('caldate');\nvar utils = require('./utils.cjs');\nvar utils$1 = require('./internal/utils.cjs');\nvar Data = require('./Data.cjs');\nvar DateFn = require('./DateFn.cjs');\nvar HolidayRule = require('./HolidayRule.cjs');\n\nfunction _interopDefaultLegacy (e) { return e && typeof e === 'object' && 'default' in e ? e : { 'default': e }; }\n\nvar CalDate__default = /*#__PURE__*/_interopDefaultLegacy(CalDate);\n\n/**\n * @copyright 2016- (c) commenthol\n * @license ISC\n */\n\n// priority in ascending order (low ... high)\nconst TYPES = ['observance', 'optional', 'school', 'bank', 'public'];\n\n/**\n * @class\n * @param {Object} data - holiday data object - see data/holidays.json\n * @param {String|Object} country - if object, use `{ country: {String}, state: {String}, region: {String} }`\n * @param {String} [state] - specifies state\n * @param {String} [region] - specifies region\n * @param {Object} [opts] - options\n * @param {Array|String} opts.languages - set language(s) with ISO 639-1 shortcodes\n * @param {String} opts.timezone - set timezone\n * @param {Array} opts.types - holiday types to consider\n * @example\n * ```js\n * new Holiday(data, 'US', 'la', 'no') // is the same as\n * new Holiday(data, 'us.la.no') // is the same as\n * new Holiday(data, { country: 'us', state: 'la', region: 'no'})\n * ```\n */\nclass Holidays {\n constructor (data, country, state, region, opts) {\n if (!data) {\n throw new TypeError('need holiday data')\n }\n this._data = data;\n this.init(country, state, region, opts);\n }\n\n /**\n * initialize holidays for a country/state/region\n * @param {String|Object} country - if object, use `{ country: {String}, state: {String}, region: {String} }`\n * @param {String} [state] - specifies state\n * @param {String} [region] - specifies region\n * @param {Object} [opts] - options\n * @param {Array|String} [opts.languages] - set language(s) with ISO 639-1 shortcodes\n * @param {String} [opts.timezone] - set timezone\n * @param {Array} [opts.types] - holiday types to consider; priority is in ascending order (low ... high)\n */\n init (...args) {\n const [country, state, region, opts] = getArgs(...args);\n\n // reset settings\n this.__conf = null;\n this.__types = opts.types && opts.types.length ? opts.types : TYPES;\n this.holidays = {};\n this.setLanguages();\n\n this.__conf = Data.splitName(country, state, region);\n this.__data = new Data(opts.data || this._data, this.__conf);\n\n if (opts.languages) {\n this.setLanguages(opts.languages);\n } else {\n this.setLanguages(this.__data.getLanguages(this.__conf));\n }\n\n const holidays = this.__data.getRules();\n if (holidays) {\n this.__timezone = opts.timezone || this.__data.getTimezones()[0];\n Object.keys(holidays).forEach((rule) => {\n this.setHoliday(rule, holidays[rule]);\n });\n return true\n }\n }\n\n /**\n * set (custom) holiday\n * @throws {TypeError}\n * @param {String} rule - rule for holiday (check supported grammar) or date in ISO Format, e.g. 12-31 for 31st Dec\n * @param {Object|String} [opts] - holiday options (if String, then opts is used as name)\n * @param {Object} opts.name - translated holiday names e.g. `{ en: 'name', es: 'nombre', ... }`\n * @param {String} opts.type - holiday type `public|bank|school|observance`\n * @returns {Boolean} `true` if holiday could be set\n */\n setHoliday (rule, opts) {\n // remove days\n if (opts === false) {\n if (this.holidays[rule]) {\n this.holidays[rule] = false;\n return true\n }\n return false\n }\n\n // assign a name to rule\n if (!opts || typeof opts === 'string') {\n opts = opts || rule;\n const lang = this.getLanguages()[0];\n opts = utils[\"default\"].set({ type: 'public' }, ['name', lang], opts);\n }\n\n // convert active properties to Date\n if (opts.active) {\n if (!Array.isArray(opts.active)) {\n throw TypeError('.active is not of type Array: ' + rule)\n }\n opts.active = opts.active.map((a) => {\n const from = utils$1.toDate(a.from);\n const to = utils$1.toDate(a.to);\n if (!(from || to)) {\n throw TypeError('.active needs .from or .to property: ' + rule)\n }\n return { from, to }\n });\n }\n\n // check for supported type\n if (!this.__types.includes(opts.type)) {\n return false\n }\n\n this.holidays[rule] = opts;\n\n const fn = new DateFn(rule, this.holidays);\n if (fn.ok) {\n this.holidays[rule].fn = fn;\n return true\n } else {\n // throw Error('could not parse rule: ' + rule) // NEXT\n console.error('could not parse rule: ' + rule); // eslint-disable-line\n }\n return false\n }\n\n /**\n * get all holidays for `year` with names using preferred `language`\n * @param {String|Date} [year] - if omitted, the current year is chosen\n * @param {String} [language] - ISO 639-1 code for language\n * @returns {Holiday[]} of found holidays in given year sorted by Date:\n * ```\n * {String} date - ISO Date String of (start)-date in local format\n * {Date} start - start date of holiday\n * {Date} end - end date of holiday\n * {String} name - name of holiday using `language` (if available)\n * {String} type - type of holiday `public|bank|school|observance`\n * ```\n */\n getHolidays (year, language) {\n year = utils$1.toYear(year);\n\n const langs = this.getLanguages();\n if (language) {\n langs.unshift(language);\n }\n\n const startSorter = (a, b) => (+a.start) - (+b.start);\n const typeIndex = (a) => this.__types.indexOf(a.type);\n const typeSorter = (a, b) => typeIndex(b) - typeIndex(a);\n const ruleIndex = (a) => /substitutes|and if /.test(a.rule) ? 1 : 0;\n const ruleLength = (a) => String(a.rule || '').length;\n const ruleSorter = (a, b) => ruleIndex(a) - ruleIndex(b) || ruleLength(a) - ruleLength(b);\n\n const filterMap = {};\n\n const arr = Object.keys(this.holidays)\n .reduce((arr, rule) => {\n if (this.holidays[rule].fn) {\n this._dateByRule(year, rule).forEach((o) => {\n arr.push({ ...this._translate(o, langs), rule });\n });\n }\n return arr\n }, [])\n // sort by date and type to filter by duplicate\n .sort((a, b) => startSorter(a, b) || typeSorter(a, b) || ruleSorter(a, b))\n .filter(item => {\n const hash = item.name + (+item.start);\n if (!filterMap[hash]) {\n filterMap[hash] = true;\n return true\n }\n return false\n });\n\n return arr\n }\n\n /**\n * check whether `date` is a holiday or not\n * @param {Date|String} [date]\n * @returns {Holiday[]|false} holiday:\n * ```\n * {String} date - ISO Date String of (start)-date in local format\n * {Date} start - start date of holiday\n * {Date} end - end date of holiday\n * {String} name - name of holiday using `language` (if available)\n * {String} type - type of holiday `public|bank|school|observance`\n * ```\n */\n isHoliday (date) {\n date = date ? new Date(date) : new Date();\n const d = new CalDate__default[\"default\"]();\n d.fromTimezone(date, this.__timezone);\n const year = d.year;\n const rules = Object.keys(this.holidays);\n const days = [];\n for (const rule of rules) {\n const hd = [].concat(this._dateByRule(year, rule));\n for (const hdrule of hd) {\n if (hdrule && date >= hdrule.start && date < hdrule.end) {\n days.push(this._translate(hdrule));\n }\n }\n }\n return days.length ? days : false\n }\n\n /**\n * set or update rule\n * @param {HolidayRule|object} holidayRule\n * @returns {boolean} `true` if holiday could be set, returns `true`\n */\n setRule (holidayRule) {\n const { rule, ...opts } = holidayRule;\n return this.setHoliday(rule, opts)\n }\n\n /**\n * unset rule\n * @param {String} rule - rule for holiday (check supported grammar) or date in ISO Format, e.g. 12-31 for 31st Dec\n * @returns {boolean} `true` if holiday could be set, returns `true`\n */\n unsetRule (rule) {\n return this.setHoliday(rule, false)\n }\n\n /**\n * get available rules for selected country, (state, region)\n * @returns {HolidayRule[]}\n */\n getRules () {\n return Object.entries(this.holidays).map(([ruleStr, obj]) => {\n return new HolidayRule.HolidayRule({ ...obj, rule: ruleStr })\n })\n }\n\n /**\n * get rule for selected country, (state, region)\n * @param {String} rule - rule for holiday (check supported grammar) or date in ISO Format, e.g. 12-31 for 31st Dec\n * @returns {HolidayRule|undefined}\n */\n getRule (rule) {\n if (this.holidays[rule]) {\n return new HolidayRule.HolidayRule({ ...this.holidays[rule], rule })\n }\n }\n\n /**\n * Query for available Countries, States, Regions\n * @param {String} [country]\n * @param {String} [state]\n * @param {String} [lang] - ISO-639 language shortcode\n * @returns {Object} shortcode, name pairs of supported countries, states, regions\n */\n query (country, state, lang) {\n const o = Data.splitName(country, state);\n if (!o || !o.country) {\n return this.getCountries(lang)\n } else if (!o.state) {\n return this.getStates(o.country, lang)\n } else {\n return this.getRegions(o.country, o.state, lang)\n }\n }\n\n /**\n * get supported countries\n * @param {String} [lang] - ISO-639 language shortcode\n * @returns {Object} shortcode, name pairs of supported countries\n * ```js\n * { AD: 'Andorra',\n * US: 'United States' }\n * ```\n */\n getCountries (lang) {\n return this.__data.getCountries(lang)\n }\n\n /**\n * get supported states for a given country\n * @param {String} country - shortcode of country\n * @param {String} [lang] - ISO-639 language shortcode\n * @returns {Object} shortcode, name pairs of supported states, regions\n * ```js\n * { al: 'Alabama', ...\n * wy: 'Wyoming' }\n * ```\n */\n getStates (country, lang) {\n return this.__data.getStates(country, lang)\n }\n\n /**\n * get supported regions for a given country, state\n * @param {String} country - shortcode of country\n * @param {String} state - shortcode of state\n * @param {String} [lang] - ISO-639 language shortcode\n * @returns {Object} shortcode, name pairs of supported regions\n * ```js\n * { no: 'New Orleans' }\n * ```\n */\n getRegions (country, state, lang) {\n return this.__data.getRegions(country, state, lang)\n }\n\n /**\n * sets timezone\n * @param {String} timezone - see `moment-timezone`\n * if `timezone` is `undefined`, then all dates are considered local dates\n */\n setTimezone (timezone) {\n this.__timezone = timezone;\n }\n\n /**\n * get timezones for country, state, region\n * @returns {Array} of {String}s containing the timezones\n */\n getTimezones () {\n if (this.__data) {\n return this.__data.getTimezones()\n }\n }\n\n /**\n * set language(s) for holiday names\n * @param {Array|String} language\n * @returns {Array} set languages\n */\n setLanguages (language) {\n if (typeof language === 'string') {\n language = [language];\n }\n const tmp = {};\n this.__languages = [].concat(\n language,\n (this.__conf ? this.__data.getLanguages(this.__conf) : []),\n 'en'\n ).filter(function (l) { // filter out duplicates\n if (!l || tmp[l]) {\n return false\n }\n tmp[l] = 1;\n return true\n });\n }\n\n /**\n * get languages for selected country, state, region\n * @returns {Array} containing ISO 639-1 language shortcodes\n */\n getLanguages () {\n return this.__languages\n }\n\n /**\n * get default day off as weekday\n * @returns {String} weekday of day off\n */\n getDayOff () {\n if (this.__conf) {\n return this.__data.getDayOff()\n }\n }\n\n /**\n * @private\n * @param {Number} year\n * @param {String} rule\n */\n _dateByRule (year, rule) {\n const _rule = this.holidays[rule];\n const dates = _rule.fn.inYear(year)\n .get(this.__timezone)\n .map((date) => {\n const odate = utils[\"default\"].merge({},\n utils[\"default\"].omit(date, ['substitute']),\n utils[\"default\"].omit(_rule, ['fn', 'enable', 'disable', 'substitute', 'active'])\n );\n if (_rule.substitute && date.substitute) {\n odate.substitute = true;\n }\n return odate\n });\n return dates\n }\n\n /**\n * translate holiday object `o` to a language\n * @private\n * @param {Object} o\n * @param {Array} langs - languages for translation\n * @returns {Object} translated holiday object\n */\n _translate (o, langs) {\n if (o && typeof o.name === 'object') {\n langs = langs || this.getLanguages();\n for (const lang of langs) {\n const name = o.name[lang];\n if (name) {\n o.name = name;\n break\n }\n }\n if (o.substitute) {\n for (const lang of langs) {\n const subst = this.__data.getSubstitueNames();\n const name = subst[lang];\n if (name) {\n o.name += ' (' + name + ')';\n break\n }\n }\n }\n }\n return o\n }\n}\n\nfunction getArgs (country, state, region, opts) {\n if (typeof region === 'object') {\n opts = region;\n region = null;\n } else if (typeof state === 'object') {\n opts = state;\n state = null;\n } else if (typeof country === 'object' && !country.country) {\n opts = country;\n }\n opts = opts || {};\n return [country, state, region, opts]\n}\n\nexports.Holidays = Holidays;\n", "'use strict';\n\nObject.defineProperty(exports, '__esModule', { value: true });\n\nvar Holidays = require('./Holidays.cjs');\nvar HolidayRule = require('./HolidayRule.cjs');\n\n\n\nexports[\"default\"] = Holidays.Holidays;\nexports.HolidayRule = HolidayRule.HolidayRule;\n", "'use strict';\n\nObject.defineProperty(exports, '__esModule', { value: true });\n\nconst data = {\n \"version\": \"2022-09-15\",\n \"license\": \"CC-BY-SA-3\",\n \"holidays\": {\n \"AD\": {\n \"names\": {\n \"ca\": \"Andorra\",\n \"es\": \"Andorra\",\n \"en\": \"Andorra\"\n },\n \"dayoff\": \"sunday\",\n \"langs\": [\n \"ca\",\n \"es\"\n ],\n \"zones\": [\n \"Europe/Andorra\"\n ],\n \"days\": {\n \"01-01\": {\n \"_name\": \"01-01\"\n },\n \"01-06\": {\n \"_name\": \"01-06\"\n },\n \"03-14\": {\n \"_name\": \"Constitution Day\"\n },\n \"05-01\": {\n \"_name\": \"05-01\"\n },\n \"08-15\": {\n \"_name\": \"08-15\"\n },\n \"09-08\": {\n \"name\": {\n \"en\": \"Our Lady of Meritxell\",\n \"es\": \"Nuestra Sra. De Meritxell\",\n \"ca\": \"Mare de D\u00E9u de Meritxell\"\n }\n },\n \"11-01\": {\n \"_name\": \"11-01\"\n },\n \"12-08\": {\n \"_name\": \"12-08\"\n },\n \"12-24\": {\n \"type\": \"bank\",\n \"_name\": \"12-24\"\n },\n \"12-25\": {\n \"_name\": \"12-25\"\n },\n \"12-26\": {\n \"_name\": \"12-26\"\n },\n \"easter -47\": {\n \"_name\": \"easter -47\"\n },\n \"easter -3 14:00\": {\n \"type\": \"bank\",\n \"_name\": \"easter -3\"\n },\n \"easter -2\": {\n \"_name\": \"easter -2\"\n },\n \"easter\": {\n \"_name\": \"easter\"\n },\n \"easter 1\": {\n \"_name\": \"easter 1\"\n },\n \"easter 49\": {\n \"_name\": \"easter 49\"\n },\n \"easter 50\": {\n \"_name\": \"easter 50\"\n }\n },\n \"regions\": {\n \"07\": {\n \"name\": \"Andorra la Vella\",\n \"days\": {\n \"1st saturday in August P3D\": {\n \"name\": {\n \"en\": \"Andorra La Vella Festival\",\n \"ca\": \"Andorra La Vella Festival\"\n }\n }\n }\n }\n }\n },\n \"AE\": {\n \"names\": {\n \"en\": \"United Arab Emirates\",\n \"ar\": \"\u062F\u0648\u0644\u0629 \u0627\u0644\u0625\u0645\u0627\u0631\u0627\u062A \u0627\u0644\u0639\u0631\u0628\u064A\u0629 \u0627\u0644\u0645\u062A\u062D\u062F\u0629\"\n },\n \"langs\": [\n \"ar\"\n ],\n \"zones\": [\n \"Asia/Dubai\"\n ],\n \"dayoff\": \"\",\n \"days\": {\n \"01-01\": {\n \"_name\": \"01-01\",\n \"name\": {\n \"ar\": \"\u0631\u0623\u0633 \u0627\u0644\u0633\u0646\u0629 \u0627\u0644\u0645\u064A\u0644\u0627\u062F\u064A\u0629\"\n }\n },\n \"12-02\": {\n \"name\": {\n \"en\": \"National Day\",\n \"ar\": \"\u0627\u0644\u064A\u0648\u0645 \u0627\u0644\u0648\u0637\u0646\u064A\"\n }\n },\n \"1 Muharram\": {\n \"_name\": \"1 Muharram\"\n },\n \"1 Shawwal P3D\": {\n \"_name\": \"1 Shawwal\"\n },\n \"10 Dhu al-Hijjah P3D\": {\n \"_name\": \"10 Dhu al-Hijjah\"\n },\n \"27 Rajab\": {\n \"_name\": \"27 Rajab\"\n },\n \"1 Ramadan\": {\n \"_name\": \"1 Ramadan\"\n },\n \"12 Rabi al-awwal\": {\n \"_name\": \"12 Rabi al-awwal\"\n }\n }\n },\n \"AG\": {\n \"names\": {\n \"en\": \"Antigua & Barbuda\"\n },\n \"langs\": [\n \"en\"\n ],\n \"dayoff\": \"sunday\",\n \"weekend\": [\n \"saturday\",\n \"sunday\"\n ],\n \"zones\": [\n \"America/Port_of_Spain\"\n ],\n \"days\": {\n \"01-01 and if sunday then next monday\": {\n \"substitute\": true,\n \"_name\": \"01-01\"\n },\n \"easter -2\": {\n \"_name\": \"easter -2\"\n },\n \"easter\": {\n \"_name\": \"easter\",\n \"type\": \"observance\"\n },\n \"easter 1\": {\n \"_name\": \"easter 1\"\n },\n \"05-01\": {\n \"_name\": \"05-01\"\n },\n \"easter 49\": {\n \"_name\": \"easter 49\",\n \"type\": \"observance\"\n },\n \"easter 50\": {\n \"_name\": \"easter 50\"\n },\n \"08-01\": {\n \"name\": {\n \"en\": \"J'Ouvert Morning\"\n }\n },\n \"08-02\": {\n \"name\": {\n \"en\": \"Last Lap\"\n }\n },\n \"11-01 if saturday,sunday then next monday\": {\n \"_name\": \"Independence Day\"\n },\n \"12-09\": {\n \"name\": {\n \"en\": \"V.C Bird Day\"\n }\n },\n \"12-25 and if saturday then next monday if sunday then next tuesday\": {\n \"_name\": \"12-25\",\n \"substitute\": true\n },\n \"12-26 and if sunday then next monday\": {\n \"_name\": \"12-26\",\n \"substitute\": true\n }\n },\n \"regions\": {\n \"10\": {\n \"name\": \"Barbuda\",\n \"days\": {\n \"easter 47 P4D\": {\n \"name\": {\n \"en\": \"Caribana\"\n },\n \"type\": \"observance\"\n }\n }\n }\n }\n },\n \"AI\": {\n \"names\": {\n \"en\": \"Anguilla\"\n },\n \"langs\": [\n \"en\"\n ],\n \"dayoff\": \"sunday\",\n \"weekend\": [\n \"saturday\",\n \"sunday\"\n ],\n \"zones\": [\n \"America/Port_of_Spain\"\n ],\n \"days\": {\n \"01-01\": {\n \"_name\": \"01-01\"\n },\n \"03-02\": {\n \"name\": {\n \"en\": \"James Ronald Webster Day\"\n }\n },\n \"easter -2\": {\n \"_name\": \"easter -2\"\n },\n \"easter\": {\n \"_name\": \"easter\",\n \"type\": \"observance\"\n },\n \"easter 1\": {\n \"_name\": \"easter 1\"\n },\n \"05-01\": {\n \"_name\": \"05-01\"\n },\n \"05-30\": {\n \"name\": {\n \"en\": \"Anguilla Day\"\n }\n },\n \"easter 49\": {\n \"_name\": \"easter 49\",\n \"type\": \"observance\"\n },\n \"easter 50\": {\n \"_name\": \"easter 50\"\n },\n \"2nd monday in June\": {\n \"name\": {\n \"en\": \"Celebration of the Birthday of Her Majesty the Queen\"\n }\n },\n \"1st monday in August\": {\n \"name\": {\n \"en\": \"August Monday\"\n }\n },\n \"1st thursday in August\": {\n \"name\": {\n \"en\": \"August Thursday\"\n }\n },\n \"1st friday in August\": {\n \"_name\": \"Constitution Day\"\n },\n \"12-19\": {\n \"name\": {\n \"en\": \"National Heroes and Heroines Day\"\n }\n },\n \"12-25 and if saturday then next monday if sunday then next tuesday\": {\n \"_name\": \"12-25\",\n \"substitute\": true\n },\n \"12-26 and if sunday then next monday\": {\n \"_name\": \"12-26\",\n \"substitute\": true\n }\n }\n },\n \"AL\": {\n \"names\": {\n \"sq\": \"Shqip\u00EBri\",\n \"en\": \"Albania\"\n },\n \"dayoff\": \"sunday\",\n \"langs\": [\n \"sq\",\n \"es\"\n ],\n \"zones\": [\n \"Europe/Tirane\"\n ],\n \"days\": {\n \"01-01 and if sunday then next tuesday\": {\n \"_name\": \"01-01\",\n \"substitute\": true\n },\n \"01-02 and if sunday then next monday\": {\n \"name\": {\n \"sq\": \"Festa e Vitit t\u00EB Ri\",\n \"en\": \"New Year Holiday\"\n },\n \"substitute\": true\n },\n \"03-02\": {\n \"name\": {\n \"sq\": \"Dita e Bes\u00EBlidhjes s\u00EB Lezh\u00EBs\",\n \"en\": \"League of Lezh\u00EB day\"\n },\n \"type\": \"observance\"\n },\n \"03-07\": {\n \"name\": {\n \"sq\": \"Dita e M\u00EBsuesit\",\n \"en\": \"Teacher's Day\"\n },\n \"type\": \"observance\"\n },\n \"03-08\": {\n \"_name\": \"Mothers Day\",\n \"type\": \"observance\"\n },\n \"03-14 and if sunday then next monday\": {\n \"name\": {\n \"sq\": \"Dita e Ver\u00EBs\",\n \"en\": \"Summer Day\"\n },\n \"substitute\": true\n },\n \"03-22 and if sunday then next monday\": {\n \"name\": {\n \"sq\": \"Dita e Sulltan Nevruzit\",\n \"en\": \"Sultan Nevruz's Day\"\n },\n \"substitute\": true\n },\n \"04-01\": {\n \"_name\": \"04-01\",\n \"type\": \"observance\"\n },\n \"easter\": {\n \"name\": {\n \"sq\": \"Pashk\u00EBt Katolike\",\n \"en\": \"Catholic Easter\"\n }\n },\n \"easter 1\": {\n \"name\": {\n \"sq\": \"Pashk\u00EBt Katolike\",\n \"en\": \"Catholic Easter\"\n }\n },\n \"orthodox\": {\n \"name\": {\n \"sq\": \"Pashk\u00EBt Ortodokse\",\n \"en\": \"Orthodox Easter\"\n }\n },\n \"orthodox 1\": {\n \"name\": {\n \"sq\": \"Pashk\u00EBt Ortodokse\",\n \"en\": \"Orthodox Easter\"\n }\n },\n \"05-01 and if sunday then next monday\": {\n \"_name\": \"05-01\",\n \"substitute\": true\n },\n \"06-01\": {\n \"name\": {\n \"sq\": \"Dita Nd\u00EBrkomb\u00EBtare e F\u00EBmij\u00EBve\",\n \"en\": \"Children's Day\"\n },\n \"type\": \"observance\"\n },\n \"10-19 and if sunday then next monday\": {\n \"name\": {\n \"sq\": \"Dita e N\u00EBn\u00EB Terez\u00EBs\",\n \"en\": \"Mother Teresa Day\"\n },\n \"substitute\": true,\n \"active\": [\n {\n \"from\": 2004\n }\n ]\n },\n \"11-22\": {\n \"name\": {\n \"sq\": \"Dita e Alfabetit\",\n \"en\": \"Alphabet Day\"\n },\n \"type\": \"observance\"\n },\n \"11-28 and if sunday then next monday\": {\n \"_name\": \"Independence Day\",\n \"substitute\": true\n },\n \"11-29 and if sunday then next monday\": {\n \"_name\": \"Liberation Day\",\n \"substitute\": true\n },\n \"12-08 and if sunday then next monday\": {\n \"name\": {\n \"sq\": \"Dita Komb\u00EBtare e Rinis\u00EB\",\n \"en\": \"Youth Day\"\n },\n \"substitute\": true,\n \"active\": [\n {\n \"from\": 2010\n }\n ]\n },\n \"12-24\": {\n \"_name\": \"12-24\",\n \"type\": \"bank\"\n },\n \"12-25 and if sunday then next monday\": {\n \"_name\": \"12-25\",\n \"substitute\": true\n },\n \"1 Shawwal\": {\n \"_name\": \"1 Shawwal\"\n },\n \"10 Dhu al-Hijjah\": {\n \"_name\": \"10 Dhu al-Hijjah\"\n }\n },\n \"regions\": {}\n },\n \"AM\": {\n \"names\": {\n \"hy\": \"\u0540\u0561\u0575\u0561\u057D\u057F\u0561\u0576\",\n \"en\": \"Armenia\"\n },\n \"dayoff\": \"sunday\",\n \"langs\": [\n \"hy\"\n ],\n \"zones\": [\n \"Asia/Yerevan\"\n ],\n \"days\": {\n \"12-31\": {\n \"_name\": \"12-31\"\n },\n \"01-01 P2D\": {\n \"_name\": \"01-01\"\n },\n \"01-03 P3D\": {\n \"name\": {\n \"en\": \"Pre-Christmas holidays\",\n \"hy\": \"\u0546\u0561\u056D\u0561\u056E\u0576\u0576\u0564\u0575\u0561\u0576 \u057F\u0578\u0576\u0565\u0580\"\n }\n },\n \"01-06\": {\n \"_name\": \"12-25\"\n },\n \"01-28\": {\n \"name\": {\n \"en\": \"Army Day\",\n \"hy\": \"\u0532\u0561\u0576\u0561\u056F\u056B \u0585\u0580\"\n }\n },\n \"02-21\": {\n \"name\": {\n \"en\": \"Mother Language Day\",\n \"hy\": \"\u0544\u0561\u0575\u0580\u0565\u0576\u056B \u056C\u0565\u0566\u057E\u056B \u0585\u0580\"\n },\n \"type\": \"observance\"\n },\n \"easter -52\": {\n \"name\": {\n \"en\": \"St. Vartan the good work and the duty days\",\n \"hy\": \"\u054D\u0578\u0582\u0580\u0562 \u054E\u0561\u0580\u0564\u0561\u0576\u0561\u0576\u0581 \u057F\u0578\u0576\u055D \u0562\u0561\u0580\u056B \u0563\u0578\u0580\u056E\u056B \u0565\u0582 \u0561\u0566\u0563\u0561\u0575\u056B\u0576 \u057F\u0578\u0582\u0580\u0584\u056B \u0585\u0580\"\n },\n \"type\": \"observance\"\n },\n \"03-08\": {\n \"_name\": \"03-08\"\n },\n \"04-07\": {\n \"name\": {\n \"en\": \"Motherhood and Beauty Day\",\n \"hy\": \"\u0544\u0561\u0575\u0580\u0578\u0582\u0569\u0575\u0561\u0576, \u0563\u0565\u0572\u0565\u0581\u056F\u0578\u0582\u0569\u0575\u0561\u0576 \u0565\u0582 \u057D\u056B\u0580\u0578 \u057F\u0578\u0576\"\n },\n \"type\": \"observance\"\n },\n \"04-24\": {\n \"_name\": \"Mothers Day\"\n },\n \"05-01\": {\n \"_name\": \"05-01\"\n },\n \"05-08\": {\n \"name\": {\n \"en\": \"Yerkrapah Day\",\n \"hy\": \"\u0535\u0580\u056F\u0580\u0561\u057A\u0561\u0570\u056B \u0585\u0580\"\n },\n \"type\": \"observance\"\n },\n \"05-09\": {\n \"name\": {\n \"en\": \"Victory and Peace Day\",\n \"hy\": \"\u0540\u0561\u0572\u0569\u0561\u0576\u0561\u056F\u056B \u0565\u0582 \u053D\u0561\u0572\u0561\u0572\u0578\u0582\u0569\u0575\u0561\u0576 \u057F\u0578\u0576\"\n }\n },\n \"05-28\": {\n \"name\": {\n \"en\": \"Republic Day\",\n \"hy\": \"\u0540\u0561\u0576\u0580\u0561\u057A\u0565\u057F\u0578\u0582\u0569\u0575\u0561\u0576 \u0585\u0580\"\n }\n },\n \"06-01\": {\n \"name\": {\n \"en\": \"The day of protection of children rights\",\n \"hy\": \"\u0535\u0580\u0565\u056D\u0561\u0576\u0565\u0580\u056B \u056B\u0580\u0561\u057E\u0578\u0582\u0576\u0584\u0576\u0565\u0580\u056B \u057A\u0561\u0577\u057F\u057A\u0561\u0576\u0578\u0582\u0569\u0575\u0561\u0576 \u0585\u0580\"\n },\n \"type\": \"observance\"\n },\n \"07-05\": {\n \"_name\": \"Constitution Day\"\n },\n \"09-01\": {\n \"name\": {\n \"en\": \"Knowledge, Literacy and Education Day\",\n \"hy\": \"\u0533\u056B\u057F\u0565\u056C\u056B\u0584\u056B, \u0563\u0580\u056B \u0565\u0582 \u0564\u057A\u0580\u0578\u0582\u0569\u0575\u0561\u0576 \u0585\u0580\"\n },\n \"type\": \"observance\"\n },\n \"09-21\": {\n \"_name\": \"Independence Day\"\n },\n \"2nd saturday in October\": {\n \"name\": {\n \"en\": \"Translator's Day\",\n \"hy\": \"\u0539\u0561\u0580\u0563\u0574\u0561\u0576\u0579\u0561\u0581 \u057F\u0578\u0576\"\n },\n \"type\": \"observance\"\n },\n \"12-07\": {\n \"name\": {\n \"en\": \"Earthquake Remembrance Day\",\n \"hy\": \"\u0535\u0580\u056F\u0580\u0561\u0577\u0561\u0580\u056A\u056B \u0566\u0578\u0570\u0565\u0580\u056B \u0570\u056B\u0577\u0561\u057F\u0561\u056F\u056B \u0585\u0580\"\n },\n \"type\": \"observance\"\n }\n }\n },\n \"AO\": {\n \"names\": {\n \"pt\": \"Angola\",\n \"en\": \"Angola\"\n },\n \"dayoff\": \"sunday\",\n \"zones\": [\n \"Africa/Lagos\"\n ],\n \"langs\": [\n \"pt\"\n ],\n \"days\": {\n \"01-01\": {\n \"_name\": \"01-01\"\n },\n \"02-04\": {\n \"name\": {\n \"pt\": \"Dia do In\u00EDcio da Luta Armada de Liberta\u00E7\u00E3o Nacional\",\n \"en\": \"Liberation Day\"\n }\n },\n \"easter -47\": {\n \"_name\": \"easter -47\"\n },\n \"03-08\": {\n \"name\": {\n \"pt\": \"Dia Internacional da Mulher\",\n \"en\": \"International Woman's Day\"\n }\n },\n \"easter -2\": {\n \"_name\": \"easter -2\"\n },\n \"easter\": {\n \"_name\": \"easter\",\n \"type\": \"observance\"\n },\n \"04-04\": {\n \"name\": {\n \"pt\": \"Dia da Paz\",\n \"en\": \"Peace Day\"\n }\n },\n \"05-01\": {\n \"_name\": \"05-01\"\n },\n \"1st sunday in May\": {\n \"_name\": \"Mothers Day\",\n \"type\": \"observance\"\n },\n \"09-17\": {\n \"name\": {\n \"pt\": \"Fundador da Na\u00E7\u00E3o e Dia dos Her\u00F3is Nacionais\",\n \"en\": \"National Hero Day\"\n }\n },\n \"11-02\": {\n \"_name\": \"11-02\"\n },\n \"11-11\": {\n \"_name\": \"Independence Day\"\n },\n \"12-25\": {\n \"_name\": \"12-25\"\n }\n }\n },\n \"AR\": {\n \"names\": {\n \"es\": \"Argentina\",\n \"en\": \"Argentina\"\n },\n \"dayoff\": \"sunday\",\n \"langs\": [\n \"es\"\n ],\n \"zones\": [\n \"America/Argentina/Buenos_Aires\",\n \"America/Argentina/Cordoba\",\n \"America/Argentina/Salta\",\n \"America/Argentina/Jujuy\",\n \"America/Argentina/Tucuman\",\n \"America/Argentina/Catamarca\",\n \"America/Argentina/La_Rioja\",\n \"America/Argentina/San_Juan\",\n \"America/Argentina/Mendoza\",\n \"America/Argentina/San_Luis\",\n \"America/Argentina/Rio_Gallegos\",\n \"America/Argentina/Ushuaia\"\n ],\n \"days\": {\n \"01-01\": {\n \"_name\": \"01-01\"\n },\n \"substitutes 01-01 if tuesday then previous monday if thursday then next friday\": {\n \"_name\": \"Bridge Day\",\n \"disable\": [\n 2015\n ]\n },\n \"easter -48\": {\n \"_name\": \"easter -48\"\n },\n \"easter -47\": {\n \"_name\": \"easter -47\"\n },\n \"03-24\": {\n \"name\": {\n \"en\": \"Day of Remembrance for Truth and Justice\",\n \"es\": \"D\u00EDa de la Memoria por la Verdad y la Justicia\"\n }\n },\n \"substitutes 03-24 if tuesday then previous monday if thursday then next friday\": {\n \"_name\": \"Bridge Day\"\n },\n \"2020-03-30\": {\n \"_name\": \"Bridge Day\"\n },\n \"easter -3\": {\n \"_name\": \"easter -3\"\n },\n \"easter -2\": {\n \"_name\": \"easter -2\"\n },\n \"04-02\": {\n \"name\": {\n \"en\": \"Day of the veterans and the fallen in Malvinas War\",\n \"es\": \"D\u00EDa del Veterano y de los Ca\u00EDdos en la Guerra de Malvinas\"\n }\n },\n \"substitutes 04-02 if tuesday then previous monday if thursday then next friday\": {\n \"_name\": \"Bridge Day\"\n },\n \"05-01\": {\n \"_name\": \"05-01\"\n },\n \"substitutes 05-01 if tuesday then previous monday if thursday then next friday\": {\n \"_name\": \"Bridge Day\"\n },\n \"05-25\": {\n \"name\": {\n \"en\": \"Day of the First National Government\",\n \"es\": \"Primer Gobierno Patrio\"\n }\n },\n \"substitutes 05-25 if tuesday then previous monday if thursday then next friday\": {\n \"_name\": \"Bridge Day\"\n },\n \"06-20\": {\n \"name\": {\n \"en\": \"National Flag Day\",\n \"es\": \"D\u00EDa de la Bandera\"\n }\n },\n \"substitutes 06-20 if tuesday then previous monday if thursday then next friday\": {\n \"_name\": \"Bridge Day\"\n },\n \"07-09\": {\n \"_name\": \"Independence Day\"\n },\n \"substitutes 07-09 if tuesday then previous monday if thursday then next friday if saturday then previous friday\": {\n \"_name\": \"Bridge Day\",\n \"disable\": [\n 2015,\n 2022\n ]\n },\n \"3rd monday in August\": {\n \"name\": {\n \"en\": \"Anniversary of the death of General Jos\u00E9 de San Mart\u00EDn\",\n \"es\": \"D\u00EDa del Libertador Jos\u00E9 de San Mart\u00EDn\"\n }\n },\n \"10-12 if tuesday,wednesday then previous monday if thursday,friday,saturday,sunday then next monday\": {\n \"name\": {\n \"en\": \"Day of Respect for Cultural Diversity\",\n \"es\": \"D\u00EDa del Respeto a la Diversidad Cultural\"\n }\n },\n \"substitutes 10-12 if monday,tuesday,wednesday then previous friday\": {\n \"_name\": \"Bridge Day\",\n \"disable\": [\n 2015,\n 2016,\n 2020\n ]\n },\n \"11-20 if tuesday,wednesday then previous monday if friday then next monday\": {\n \"name\": {\n \"en\": \"Day of National Sovereignty\",\n \"es\": \"D\u00EDa de la Soberan\u00EDa nacional\"\n }\n },\n \"substitutes 11-20 if saturday,sunday then next monday\": {\n \"_name\": \"Bridge Day\",\n \"disable\": [\n 2016\n ]\n },\n \"12-08\": {\n \"_name\": \"12-08\"\n },\n \"substitutes 12-08 if tuesday then previous monday if thursday then next friday\": {\n \"_name\": \"Bridge Day\"\n },\n \"12-24 12:00\": {\n \"_name\": \"12-24\",\n \"type\": \"optional\"\n },\n \"substitutes 12-24 if tuesday then previous monday\": {\n \"_name\": \"Bridge Day\"\n },\n \"12-25\": {\n \"_name\": \"12-25\"\n },\n \"substitutes 12-25 if tuesday then previous monday if thursday then next friday\": {\n \"_name\": \"Bridge Day\"\n },\n \"12-31 12:00\": {\n \"_name\": \"12-31\",\n \"type\": \"optional\"\n }\n }\n },\n \"AS\": {\n \"names\": {\n \"en\": \"American Samoa\"\n },\n \"dayoff\": \"sunday\",\n \"zones\": [\n \"Pacific/Pago_Pago\"\n ],\n \"langs\": [\n \"en\"\n ],\n \"_days\": [\n \"US\"\n ],\n \"days\": {\n \"3rd monday in February\": {\n \"name\": {\n \"en\": \"Washington's Birthday\"\n }\n },\n \"03-17\": false,\n \"04-15 if friday then next monday if saturday,sunday then next tuesday\": false,\n \"04-17 and if sunday then next monday\": {\n \"name\": {\n \"en\": \"American Samoa Flag Day\"\n },\n \"substitute\": true\n },\n \"07-16\": {\n \"name\": {\n \"en\": \"Manu'a Cession Day\"\n },\n \"type\": \"optional\",\n \"note\": \"Goverment offices closed\"\n },\n \"2nd sunday in October\": {\n \"name\": {\n \"en\": \"White Sunday\"\n },\n \"type\": \"observance\",\n \"note\": \"christian\"\n },\n \"12-24 12:00\": {\n \"_name\": \"12-24\",\n \"type\": \"bank\"\n },\n \"12-31 12:00\": {\n \"_name\": \"12-31\",\n \"type\": \"bank\"\n }\n }\n },\n \"AT\": {\n \"names\": {\n \"de-at\": \"\u00D6sterreich\",\n \"en\": \"Austria\"\n },\n \"dayoff\": \"sunday\",\n \"zones\": [\n \"Europe/Vienna\"\n ],\n \"langs\": [\n \"de-at\",\n \"de\"\n ],\n \"days\": {\n \"01-01\": {\n \"_name\": \"01-01\"\n },\n \"01-06\": {\n \"_name\": \"01-06\"\n },\n \"easter -2 prior to 2019\": {\n \"_name\": \"easter -2\",\n \"type\": \"optional\"\n },\n \"easter -1\": {\n \"_name\": \"easter -1\",\n \"type\": \"observance\"\n },\n \"easter\": {\n \"_name\": \"easter\"\n },\n \"easter 1\": {\n \"_name\": \"easter 1\"\n },\n \"05-01\": {\n \"name\": {\n \"de-at\": \"Staatsfeiertag\"\n }\n },\n \"2nd sunday in May\": {\n \"_name\": \"Mothers Day\",\n \"type\": \"observance\"\n },\n \"easter 39\": {\n \"_name\": \"easter 39\"\n },\n \"easter 49\": {\n \"_name\": \"easter 49\"\n },\n \"easter 50\": {\n \"_name\": \"easter 50\"\n },\n \"easter 60\": {\n \"_name\": \"easter 60\"\n },\n \"08-15\": {\n \"_name\": \"08-15\"\n },\n \"10-26\": {\n \"_name\": \"National Holiday\"\n },\n \"11-01\": {\n \"_name\": \"11-01\"\n },\n \"12-08\": {\n \"_name\": \"12-08\"\n },\n \"12-24 14:00 if sunday then 00:00\": {\n \"_name\": \"12-24\",\n \"type\": \"bank\"\n },\n \"12-25\": {\n \"_name\": \"12-25\"\n },\n \"12-26\": {\n \"_name\": \"12-26\"\n },\n \"12-31 14:00 if sunday then 00:00\": {\n \"_name\": \"12-31\",\n \"type\": \"bank\"\n }\n },\n \"states\": {\n \"1\": {\n \"name\": \"Burgenland\",\n \"days\": {\n \"11-11\": {\n \"name\": {\n \"de-at\": \"Martinstag\"\n }\n }\n }\n },\n \"2\": {\n \"names\": {\n \"de\": \"K\u00E4rnten\",\n \"en\": \"Carinthia\"\n },\n \"days\": {\n \"03-19\": {\n \"_name\": \"03-19\"\n },\n \"10-10\": {\n \"name\": {\n \"de-at\": \"Tag der Volksabstimmung\"\n }\n }\n }\n },\n \"3\": {\n \"names\": {\n \"de\": \"Nieder\u00F6sterreich\",\n \"en\": \"Lower Austria\"\n },\n \"days\": {\n \"11-15\": {\n \"name\": {\n \"de-at\": \"Leopold\"\n }\n }\n }\n },\n \"4\": {\n \"names\": {\n \"de\": \"Ober\u00F6sterreich\",\n \"en\": \"Upper Austria\"\n },\n \"days\": {\n \"05-04\": {\n \"name\": {\n \"de-at\": \"Florian\"\n }\n }\n }\n },\n \"5\": {\n \"names\": {\n \"de\": \"Land Salzburg\",\n \"en\": \"Salzburg\"\n },\n \"days\": {\n \"09-24\": {\n \"name\": {\n \"de-at\": \"Rupert\"\n }\n }\n }\n },\n \"6\": {\n \"names\": {\n \"de\": \"Steiermark\",\n \"en\": \"Styria\"\n },\n \"days\": {\n \"03-19\": {\n \"_name\": \"03-19\"\n }\n }\n },\n \"7\": {\n \"names\": {\n \"de\": \"Tirol\",\n \"en\": \"Tyrol\"\n },\n \"days\": {\n \"03-19\": {\n \"_name\": \"03-19\"\n }\n }\n },\n \"8\": {\n \"name\": \"Vorarlberg\",\n \"days\": {\n \"03-19\": {\n \"_name\": \"03-19\"\n }\n }\n },\n \"9\": {\n \"names\": {\n \"de\": \"Wien\",\n \"en\": \"Vienna\"\n },\n \"days\": {\n \"11-15\": {\n \"name\": {\n \"de-at\": \"Leopold\"\n }\n }\n }\n }\n }\n },\n \"AU\": {\n \"names\": {\n \"en\": \"Australia\"\n },\n \"dayoff\": \"sunday\",\n \"langs\": [\n \"en\"\n ],\n \"zones\": [\n \"Australia/Sydney\",\n \"Australia/Lord_Howe\",\n \"Antarctica/Macquarie\",\n \"Australia/Hobart\",\n \"Australia/Currie\",\n \"Australia/Melbourne\",\n \"Australia/Broken_Hill\",\n \"Australia/Brisbane\",\n \"Australia/Lindeman\",\n \"Australia/Adelaide\",\n \"Australia/Darwin\",\n \"Australia/Perth\",\n \"Australia/Eucla\"\n ],\n \"days\": {\n \"01-01 and if saturday,sunday then next monday\": {\n \"_name\": \"01-01\"\n },\n \"01-26 if saturday,sunday then next monday\": {\n \"substitute\": true,\n \"name\": {\n \"en\": \"Australia Day\"\n }\n },\n \"easter -2\": {\n \"_name\": \"easter -2\"\n },\n \"easter -1\": {\n \"_name\": \"easter -1\"\n },\n \"easter\": {\n \"_name\": \"easter\"\n },\n \"easter 1\": {\n \"_name\": \"easter 1\"\n },\n \"04-25\": {\n \"name\": {\n \"en\": \"Anzac Day\"\n }\n },\n \"2nd sunday in May\": {\n \"_name\": \"Mothers Day\",\n \"type\": \"observance\"\n },\n \"1st sunday in September\": {\n \"_name\": \"Fathers Day\",\n \"type\": \"observance\"\n },\n \"12-25 and if saturday then next monday if sunday then next tuesday\": {\n \"substitute\": true,\n \"_name\": \"12-25\"\n },\n \"12-26 and if saturday then next monday if sunday then next tuesday\": {\n \"substitute\": true,\n \"_name\": \"12-26\"\n },\n \"2022-09-22\": {\n \"name\": {\n \"en\": \"National Day of Mourning for Queen Elizabeth II\"\n }\n }\n },\n \"states\": {\n \"ACT\": {\n \"name\": \"Australian Capital Territory\",\n \"zones\": [\n \"Australia/Sydney\"\n ],\n \"days\": {\n \"2nd monday in March\": {\n \"name\": {\n \"en\": \"Canberra Day\"\n }\n },\n \"04-25\": false,\n \"04-25 if sunday then next monday\": {\n \"substitute\": true,\n \"name\": {\n \"en\": \"Anzac Day\"\n }\n },\n \"2020-04-27\": {\n \"name\": {\n \"en\": \"Declared public holiday\"\n },\n \"type\": \"public\"\n },\n \"monday after 05-27\": {\n \"name\": {\n \"en\": \"Reconciliation Day\"\n }\n },\n \"2nd monday in June\": {\n \"name\": {\n \"en\": \"Queen's Birthday\"\n }\n },\n \"1st monday in October\": {\n \"name\": {\n \"en\": \"Labour Day\"\n }\n }\n }\n },\n \"NSW\": {\n \"name\": \"New South Wales\",\n \"zones\": [\n \"Australia/Sydney\"\n ],\n \"days\": {\n \"2nd monday in June\": {\n \"name\": {\n \"en\": \"Queen's Birthday\"\n }\n },\n \"1st monday in August\": {\n \"name\": {\n \"en\": \"Bank Holiday\"\n },\n \"type\": \"bank\"\n },\n \"1st monday in October\": {\n \"name\": {\n \"en\": \"Labour Day\"\n }\n }\n }\n },\n \"NT\": {\n \"name\": \"Northern Territory\",\n \"zones\": [\n \"Australia/Darwin\"\n ],\n \"days\": {\n \"easter\": false,\n \"04-25\": false,\n \"04-25 if sunday then next monday\": {\n \"substitute\": true,\n \"name\": {\n \"en\": \"Anzac Day\"\n }\n },\n \"1st monday in May\": {\n \"name\": {\n \"en\": \"May Day\"\n }\n },\n \"2nd monday in June\": {\n \"name\": {\n \"en\": \"Queen's Birthday\"\n }\n },\n \"1st monday in August\": {\n \"name\": {\n \"en\": \"Picnic Day\"\n }\n },\n \"1st monday in October\": false,\n \"12-24 19:00\": {\n \"_name\": \"12-24\"\n },\n \"12-25 and if saturday then next monday if sunday then next tuesday\": false,\n \"12-25 if saturday then next monday if sunday then next tuesday\": {\n \"substitute\": true,\n \"_name\": \"12-25\"\n },\n \"12-26 and if saturday then next monday if sunday then next tuesday\": false,\n \"12-26 if saturday then next monday if sunday then next tuesday\": {\n \"substitute\": true,\n \"_name\": \"12-26\"\n },\n \"12-31 19:00\": {\n \"_name\": \"12-31\"\n }\n }\n },\n \"QLD\": {\n \"name\": \"Queensland\",\n \"zones\": [\n \"Australia/Brisbane\",\n \"Australia/Lindeman\"\n ],\n \"days\": {\n \"04-25\": false,\n \"04-25 if sunday then next monday\": {\n \"substitute\": true,\n \"name\": {\n \"en\": \"Anzac Day\"\n }\n },\n \"1st monday in May\": {\n \"name\": {\n \"en\": \"Labour Day\"\n }\n },\n \"2nd monday in June\": false,\n \"1st monday in October\": {\n \"name\": {\n \"en\": \"Queen's Birthday\"\n }\n },\n \"12-24 18:00\": {\n \"_name\": \"12-24\"\n }\n }\n },\n \"SA\": {\n \"name\": \"South Australia\",\n \"zones\": [\n \"Australia/Adelaide\"\n ],\n \"days\": {\n \"easter\": false,\n \"2nd monday in March\": {\n \"name\": {\n \"en\": \"Adelaide Cup Day\"\n }\n },\n \"2nd monday in June\": {\n \"name\": {\n \"en\": \"Queen's Birthday\"\n }\n },\n \"1st monday in October\": {\n \"name\": {\n \"en\": \"Labour Day\"\n }\n },\n \"12-24 19:00\": {\n \"_name\": \"12-24\"\n },\n \"12-25 and if saturday then next monday if sunday then next tuesday\": false,\n \"12-25 if saturday then next monday if sunday then next tuesday\": {\n \"substitute\": true,\n \"_name\": \"12-25\"\n },\n \"12-26 and if saturday then next monday if sunday then next tuesday\": false,\n \"12-26 if saturday then next monday if sunday then next tuesday\": {\n \"substitute\": true,\n \"name\": \"Proclamation Day\"\n },\n \"12-31 19:00\": {\n \"_name\": \"12-31\"\n }\n }\n },\n \"TAS\": {\n \"name\": \"Tasmania\",\n \"zones\": [\n \"Australia/Hobart\"\n ],\n \"days\": {\n \"01-01 and if saturday,sunday then next monday\": false,\n \"01-01 if saturday then next monday if sunday then next tuesday\": {\n \"substitute\": true,\n \"_name\": \"01-01\"\n },\n \"2nd monday in March\": {\n \"name\": {\n \"en\": \"Eight Hours Day\"\n }\n },\n \"easter -1\": false,\n \"easter\": false,\n \"easter +2\": {\n \"name\": \"Easter Tuesday\",\n \"type\": \"optional\",\n \"note\": \"Public Service employees or contract dependent\"\n },\n \"2nd monday in June\": {\n \"name\": {\n \"en\": \"Queen's Birthday\"\n }\n },\n \"1st monday in October\": false,\n \"12-26 and if saturday then next monday if sunday then next tuesday\": false,\n \"12-26 if saturday then next monday if sunday then next tuesday\": {\n \"substitute\": true,\n \"_name\": \"12-26\"\n }\n }\n },\n \"VIC\": {\n \"name\": \"Victoria\",\n \"zones\": [\n \"Australia/Melbourne\"\n ],\n \"days\": {\n \"2nd monday in March\": {\n \"name\": {\n \"en\": \"Labour Day\"\n }\n },\n \"2nd monday in June\": {\n \"name\": {\n \"en\": \"Queen's Birthday\"\n }\n },\n \"1st monday in October\": false,\n \"1st friday before October\": {\n \"name\": {\n \"en\": \"AFL Grand Final Friday\"\n },\n \"note\": \"Date might differ as dependent on AFL schedule\"\n },\n \"1st tuesday in November\": {\n \"name\": {\n \"en\": \"Melbourne Cup\"\n }\n }\n }\n },\n \"WA\": {\n \"name\": \"Western Australia\",\n \"zones\": [\n \"Australia/Perth\",\n \"Australia/Eucla\"\n ],\n \"days\": {\n \"1st monday in March\": {\n \"name\": {\n \"en\": \"Labour Day\"\n }\n },\n \"easter -1\": false,\n \"easter\": false,\n \"04-25\": false,\n \"04-25 and if saturday,sunday then next monday\": {\n \"substitute\": true,\n \"name\": {\n \"en\": \"Anzac Day\"\n }\n },\n \"1st monday in June\": {\n \"name\": {\n \"en\": \"Western Australia Day\"\n }\n },\n \"2nd monday in June\": false,\n \"monday before October\": {\n \"name\": {\n \"en\": \"Queen's Birthday\"\n },\n \"note\": \"Might be on a different day; is proclaimed by Governor\"\n },\n \"1st monday in October\": false\n }\n }\n }\n },\n \"AW\": {\n \"names\": {\n \"pap\": \"Aruba\",\n \"nl\": \"Aruba\",\n \"en\": \"Aruba\"\n },\n \"dayoff\": \"sunday\",\n \"zones\": [\n \"America/Curacao\"\n ],\n \"langs\": [\n \"pap\",\n \"nl\"\n ],\n \"days\": {\n \"01-01\": {\n \"_name\": \"01-01\"\n },\n \"01-25\": {\n \"name\": {\n \"pap\": \"Dia di Betico\",\n \"nl\": \"Herdenking G. F. Croes\",\n \"en\": \"Betico Croes Day\"\n }\n },\n \"easter -48\": {\n \"_name\": \"easter -48\"\n },\n \"03-18 and if saturday then previous friday if sunday then next monday\": {\n \"substitute\": true,\n \"name\": {\n \"pap\": \"Dia di Himno y Bandera\",\n \"nl\": \"Herdenking Vlag en Volkslied\",\n \"en\": \"National Anthem and Flag Day\"\n }\n },\n \"easter -2\": {\n \"_name\": \"easter -2\"\n },\n \"easter\": {\n \"_name\": \"easter\",\n \"type\": \"observance\"\n },\n \"easter 1\": {\n \"_name\": \"easter 1\"\n },\n \"04-27\": {\n \"name\": {\n \"pap\": \"A\u00F1a di Rey\",\n \"nl\": \"Koningsdag\",\n \"en\": \"Kings Day\"\n }\n },\n \"05-01 if sunday then next monday\": {\n \"_name\": \"05-01\"\n },\n \"06-24\": {\n \"name\": {\n \"pap\": \"Dera Gai\",\n \"nl\": \"Dera Gai\",\n \"en\": \"Dera Gai\"\n },\n \"type\": \"observance\"\n },\n \"easter 39\": {\n \"_name\": \"easter 39\"\n },\n \"12-05\": {\n \"name\": {\n \"nl\": \"Sinterklaasavond\",\n \"en\": \"St. Nicholas' Eve\"\n },\n \"type\": \"observance\"\n },\n \"12-25\": {\n \"_name\": \"12-25\"\n },\n \"12-26\": {\n \"_name\": \"12-26\"\n }\n }\n },\n \"AX\": {\n \"names\": {\n \"sv\": \"Landskapet \u00C5land\",\n \"en\": \"\u00C5land Islands\"\n },\n \"dayoff\": \"sunday\",\n \"zones\": [\n \"Europe/Helsinki\"\n ],\n \"langs\": [\n \"sv\"\n ],\n \"days\": {\n \"01-01\": {\n \"_name\": \"01-01\"\n },\n \"01-06\": {\n \"_name\": \"01-06\"\n },\n \"03-30\": {\n \"name\": {\n \"sv\": \"\u00C5lands demilitariseringsdag\",\n \"en\": \"Demilitarization Day\"\n }\n },\n \"easter -2\": {\n \"_name\": \"easter -2\"\n },\n \"easter\": {\n \"_name\": \"easter\",\n \"type\": \"observance\"\n },\n \"easter 1\": {\n \"_name\": \"easter 1\"\n },\n \"05-01\": {\n \"_name\": \"05-01\"\n },\n \"easter 39\": {\n \"_name\": \"easter 39\"\n },\n \"easter 49\": {\n \"_name\": \"easter 49\",\n \"type\": \"observance\"\n },\n \"06-09\": {\n \"name\": {\n \"sv\": \"Sj\u00E4lvstyrelsedagen\",\n \"en\": \"Autonomy Day\"\n }\n },\n \"3rd friday after 06-01 12:00\": {\n \"name\": {\n \"sv\": \"Midsommarafton\",\n \"en\": \"Midsummer Eve\"\n }\n },\n \"3rd saturday after 06-01\": {\n \"name\": {\n \"sv\": \"Midsommardagen\",\n \"en\": \"Midsummer Day\"\n }\n },\n \"12-06\": {\n \"_name\": \"Independence Day\"\n },\n \"12-24 12:00\": {\n \"_name\": \"12-24\",\n \"type\": \"bank\"\n },\n \"12-25\": {\n \"_name\": \"12-25\"\n },\n \"12-26\": {\n \"_name\": \"12-26\"\n },\n \"12-31 12:00\": {\n \"_name\": \"12-31\",\n \"type\": \"bank\"\n }\n }\n },\n \"AZ\": {\n \"names\": {\n \"az\": \"Az\u0259rbaycan Respublikas\u0131\",\n \"en\": \"Azerbaijan\"\n },\n \"dayoff\": \"sunday\",\n \"weekend\": [\n \"saturday\",\n \"sunday\"\n ],\n \"zones\": [\n \"Asia/Baku\"\n ],\n \"langs\": [\n \"az\"\n ],\n \"days\": {\n \"01-01 and if saturday then next monday if sunday then next tuesday\": {\n \"substitute\": true,\n \"_name\": \"01-01\"\n },\n \"01-02 and if saturday then next monday if sunday then next tuesday\": {\n \"substitute\": true,\n \"_name\": \"01-01\"\n },\n \"01-20\": {\n \"name\": {\n \"az\": \"Qara Yanvar\",\n \"en\": \"Martyrs' Day\"\n },\n \"type\": \"observance\"\n },\n \"03-08 and if saturday,sunday then next monday\": {\n \"substitute\": true,\n \"_name\": \"03-08\"\n },\n \"03-20\": {\n \"name\": {\n \"az\": \"Novruz\",\n \"en\": \"Spring Festival\"\n },\n \"active\": [\n {\n \"from\": 2011\n }\n ]\n },\n \"05-09 and if saturday,sunday then next monday\": {\n \"substitute\": true,\n \"name\": {\n \"az\": \"Fa\u015Fizm \u00FCz\u0259rind\u0259 q\u0259l\u0259b\u0259 g\u00FCn\u00FC\",\n \"en\": \"Day of Victory over Fascism\"\n }\n },\n \"05-28 and if saturday,sunday then next monday\": {\n \"substitute\": true,\n \"name\": {\n \"az\": \"Respublika g\u00FCn\u00FC\",\n \"en\": \"Republic Day\"\n }\n },\n \"06-15 and if saturday,sunday then next monday\": {\n \"substitute\": true,\n \"name\": {\n \"az\": \"Az\u0259rbaycan xalq\u0131n\u0131n Milli Qurtulu\u015F g\u00FCn\u00FC\",\n \"en\": \"National Salvation Day\"\n }\n },\n \"06-26 and if saturday,sunday then next monday\": {\n \"substitute\": true,\n \"name\": {\n \"az\": \"Az\u0259rbaycan Respublikas\u0131n\u0131n Silahl\u0131 Q\u00FCvv\u0259l\u0259ri g\u00FCn\u00FC\",\n \"en\": \"Azerbaijan Armed Forces Day\"\n }\n },\n \"10-18 and if saturday,sunday then next monday\": {\n \"substitute\": true,\n \"name\": {\n \"az\": \"D\u00F6vl\u0259t M\u00FCst\u0259qilliyi g\u00FCn\u00FC\",\n \"en\": \"Independence Day\"\n }\n },\n \"11-09 and if saturday,sunday then next monday\": {\n \"substitute\": true,\n \"name\": {\n \"az\": \"D\u00F6vl\u0259t Bayra\u011F\u0131 g\u00FCn\u00FC\",\n \"en\": \"Flag Day\"\n }\n },\n \"11-12\": {\n \"name\": {\n \"az\": \"Konstitusiya g\u00FCn\u00FC\",\n \"en\": \"Constitution Day\"\n }\n },\n \"11-17\": {\n \"name\": {\n \"az\": \"Milli Dir\u00E7\u0259li\u015F g\u00FCn\u00FC\",\n \"en\": \"National Revival Day\"\n }\n },\n \"12-31 and if saturday,sunday then next monday\": {\n \"substitute\": true,\n \"name\": {\n \"az\": \"D\u00FCnya az\u0259rbaycanl\u0131lar\u0131n h\u0259mr\u0259yliyi g\u00FCn\u00FC\",\n \"en\": \"International Solidarity Day of Azerbaijanis\"\n }\n },\n \"1 Shawwal and if saturday then next monday if sunday then next tuesday\": {\n \"substitute\": true,\n \"_name\": \"1 Shawwal\"\n },\n \"2 Shawwal and if saturday then next monday if sunday then next tuesday\": {\n \"substitute\": true,\n \"_name\": \"1 Shawwal\"\n },\n \"10 Dhu al-Hijjah and if saturday then next monday if sunday then next tuesday\": {\n \"substitute\": true,\n \"_name\": \"10 Dhu al-Hijjah\"\n },\n \"11 Dhu al-Hijjah and if saturday then next monday if sunday then next tuesday\": {\n \"substitute\": true,\n \"_name\": \"10 Dhu al-Hijjah\"\n }\n }\n },\n \"BA\": {\n \"names\": {\n \"bs\": \"Bosna i Hercegovina\",\n \"sr\": \"\u0411\u043E\u0441\u043Da \u0438 \u0425\u0435\u0440\u0446\u0435\u0433\u043E\u0432\u0438\u043D\u0430\",\n \"hr\": \"Bosna i Hercegovina\",\n \"en\": \"Bosnia and Herzegovina\"\n },\n \"langs\": [\n \"bs\",\n \"sr\",\n \"hr\"\n ],\n \"zones\": [\n \"Europe/Belgrade\"\n ],\n \"dayoff\": \"sunday\",\n \"days\": {\n \"01-01 and if sunday then next tuesday\": {\n \"_name\": \"01-01\",\n \"substitute\": true\n },\n \"01-02 and if sunday then next monday\": {\n \"name\": {\n \"en\": \"2nd day of the New Year\",\n \"bs\": \"Drugi dan Nove Godine\"\n },\n \"substitute\": true\n },\n \"05-01 and if sunday then next tuesday\": {\n \"_name\": \"05-01\",\n \"substitute\": true\n },\n \"05-02 and if sunday then next monday\": {\n \"name\": {\n \"en\": \"2nd day of the Labour Day\",\n \"bs\": \"Drugi dan Dana rada\"\n },\n \"substitute\": true\n },\n \"01-06\": {\n \"_name\": \"01-06\"\n },\n \"easter\": {\n \"_name\": \"easter\"\n },\n \"easter 1\": {\n \"_name\": \"easter 1\"\n },\n \"easter 60\": {\n \"_name\": \"easter 60\"\n },\n \"08-15\": {\n \"_name\": \"08-15\"\n },\n \"11-01\": {\n \"_name\": \"11-01\"\n },\n \"11-02\": {\n \"_name\": \"11-02\"\n },\n \"12-25\": {\n \"_name\": \"12-25\"\n },\n \"12-26\": {\n \"_name\": \"12-26\"\n },\n \"julian 01-01\": {\n \"_name\": \"julian 01-01\"\n },\n \"orthodox\": {\n \"_name\": \"orthodox\"\n },\n \"julian 08-15\": {\n \"_name\": \"08-15\",\n \"note\": \"orthodox\"\n },\n \"julian 12-25\": {\n \"_name\": \"julian 12-25\"\n },\n \"1 Muharram\": {\n \"_name\": \"1 Muharram\"\n },\n \"12 Rabi al-awwal\": {\n \"_name\": \"12 Rabi al-awwal\"\n },\n \"10 Dhu al-Hijjah P4D\": {\n \"_name\": \"10 Dhu al-Hijjah\"\n },\n \"1 Shawwal P3D\": {\n \"_name\": \"1 Shawwal\"\n }\n },\n \"states\": {\n \"BIH\": {\n \"name\": \"Federation of Bosnia and Herzegovina\",\n \"days\": {\n \"03-01\": {\n \"_name\": \"Independence Day\"\n },\n \"11-25\": {\n \"name\": {\n \"en\": \"Statehood Day\",\n \"bs\": \"Dan dr\u017Eavnosti\"\n }\n }\n },\n \"regions\": {\n \"W\": {\n \"name\": \"Western Herzegovina\",\n \"days\": {\n \"11-25\": false\n }\n }\n }\n },\n \"BRC\": {\n \"name\": \"Br\u010Dko District\",\n \"days\": {\n \"03-08\": {\n \"name\": {\n \"en\": \"Day of the Establishment of the District\"\n }\n }\n }\n },\n \"SRP\": {\n \"name\": \"Republika Srpska\",\n \"days\": {\n \"01-09\": {\n \"name\": {\n \"en\": \"Republic Day\",\n \"bs\": \"Dan Republike\"\n }\n },\n \"05-09\": {\n \"name\": {\n \"en\": \"Victory Day\",\n \"bs\": \"Dan pobjede\"\n }\n },\n \"11-21\": {\n \"name\": {\n \"en\": \"Dayton Agreement Day\",\n \"bs\": \"Dan uspostave Op\u0161teg okvirnog sporazuma za mir u Bosni i Hercegovini\"\n }\n }\n }\n }\n }\n },\n \"BB\": {\n \"names\": {\n \"en\": \"Barbados\"\n },\n \"dayoff\": \"sunday\",\n \"langs\": [\n \"en\"\n ],\n \"zones\": [\n \"America/Barbados\"\n ],\n \"days\": {\n \"01-01\": {\n \"_name\": \"01-01\"\n },\n \"01-21\": {\n \"name\": {\n \"en\": \"Errol Barrow Day\"\n }\n },\n \"easter -2\": {\n \"_name\": \"easter -2\"\n },\n \"easter\": {\n \"_name\": \"easter\",\n \"type\": \"observance\"\n },\n \"easter 1\": {\n \"_name\": \"easter 1\"\n },\n \"04-28\": {\n \"name\": {\n \"en\": \"National Heroes Day\"\n }\n },\n \"05-01 if sunday then next monday\": {\n \"name\": {\n \"en\": \"May Day\"\n }\n },\n \"easter 49\": {\n \"_name\": \"easter 49\"\n },\n \"easter 50\": {\n \"_name\": \"easter 50\"\n },\n \"08-01\": {\n \"name\": {\n \"en\": \"Emancipation Day\"\n }\n },\n \"1st monday in August\": {\n \"name\": {\n \"en\": \"Kadooment Day\"\n }\n },\n \"11-30\": {\n \"_name\": \"Independence Day\"\n },\n \"12-25\": {\n \"_name\": \"12-25\"\n },\n \"substitutes 12-25 if sunday then next tuesday\": {\n \"_name\": \"Public Holiday\"\n },\n \"12-26\": {\n \"_name\": \"12-26\"\n },\n \"substitutes 12-26 if sunday then next monday\": {\n \"_name\": \"Public Holiday\"\n }\n }\n },\n \"BD\": {\n \"names\": {\n \"bn\": \"\u0997\u09A3\u09AA\u09CD\u09B0\u099C\u09BE\u09A4\u09A8\u09CD\u09A4\u09CD\u09B0\u09C0 \u09AC\u09BE\u0982\u09B2\u09BE\u09A6\u09C7\u09B6\",\n \"en\": \"People's Republic of Bangladesh\"\n },\n \"langs\": [\n \"bn\"\n ],\n \"zones\": [\n \"Asia/Dhaka\"\n ],\n \"dayoff\": \"friday\",\n \"weekend\": [\n \"friday\",\n \"saturday\"\n ],\n \"days\": {\n \"bengali-revised 11-9\": {\n \"name\": {\n \"bn\": \"\u09B6\u09B9\u09C0\u09A6 \u09A6\u09BF\u09AC\u09B8\",\n \"en\": \"Language Martyrs' Day\"\n }\n },\n \"bengali-revised 12-3\": {\n \"name\": {\n \"bn\": \"\u09AE\u09C1\u099C\u09BF\u09AC \u099C\u09AF\u09BC\u09A8\",\n \"en\": \"Mujib's Birthday & Children's Day\"\n }\n },\n \"bengali-revised 12-12\": {\n \"name\": {\n \"bn\": \"\u09B8\u09CD\u09AC\u09BE\u09A7\u09C0\u09A8\u09A4\u09BE \u09A6\u09BF\u09AC\u09B8\",\n \"en\": \"Independence Day\"\n }\n },\n \"bengali-revised 1-1\": {\n \"name\": {\n \"bn\": \"\u09AA\u09B9\u09C7\u09B2\u09BE \u09AC\u09C8\u09B6\u09BE\u0996\",\n \"en\": \"Bengali New Year's Day\"\n }\n },\n \"bengali-revised 1-18\": {\n \"_name\": \"05-01\",\n \"name\": {\n \"bn\": \"\u09AE\u09C7 \u09A6\u09BF\u09AC\u09B8\",\n \"en\": \"May Day\"\n }\n },\n \"bengali-revised 4-31\": {\n \"name\": {\n \"bn\": \"\u099C\u09BE\u09A4\u09C0\u09AF\u09BC \u09B6\u09CB\u0995 \u09A6\u09BF\u09AC\u09B8\",\n \"en\": \"National Mourning Day\"\n }\n },\n \"bengali-revised 9-2\": {\n \"name\": {\n \"bn\": \"\u09AC\u09BF\u099C\u09AF\u09BC \u09A6\u09BF\u09AC\u09B8\",\n \"en\": \"Victory Day\"\n }\n },\n \"10 Muharram\": {\n \"_name\": \"10 Muharram\"\n },\n \"12 Rabi al-awwal\": {\n \"_name\": \"12 Rabi al-awwal\"\n },\n \"1 Shawwal P3D\": {\n \"_name\": \"1 Shawwal\"\n },\n \"10 Dhu al-Hijjah P3D\": {\n \"_name\": \"10 Dhu al-Hijjah\"\n },\n \"05-19\": {\n \"name\": {\n \"bn\": \"\u09AC\u09C1\u09A6\u09CD\u09A7 \u09AA\u09C2\u09B0\u09CD\u09A3\u09BF\u09AE\u09BE\",\n \"en\": \"Buddha's Birthday\"\n },\n \"enable\": [\n \"2016-05-21\",\n \"2017-05-10\",\n \"2018-04-29\",\n \"2019-05-19\",\n \"2020-05-07\"\n ],\n \"disable\": [\n \"2016-05-19\",\n \"2017-05-19\",\n \"2018-05-19\",\n \"2019-05-19\",\n \"2020-05-19\"\n ]\n },\n \"08-24\": {\n \"name\": {\n \"bn\": \"\u099C\u09A8\u09CD\u09AE\u09BE\u09B7\u09CD\u099F\u09AE\u09C0\",\n \"en\": \"Krishna Janmashtami\"\n },\n \"enable\": [\n \"2016-08-25\",\n \"2017-08-14\",\n \"2018-09-02\",\n \"2019-08-24\",\n \"2020-08-11\"\n ],\n \"disable\": [\n \"2016-08-24\",\n \"2017-08-24\",\n \"2018-08-24\",\n \"2019-08-24\",\n \"2020-08-24\"\n ]\n },\n \"10-08\": {\n \"name\": {\n \"bn\": \"\u09A6\u09C1\u09B0\u09CD\u0997\u09BE \u09AA\u09C2\u099C\u09BE\",\n \"en\": \"Durga Puja\"\n },\n \"enable\": [\n \"2016-10-11\",\n \"2017-09-30\",\n \"2018-10-19\",\n \"2019-10-08\",\n \"2020-10-25\"\n ],\n \"disable\": [\n \"2016-10-08\",\n \"2017-10-08\",\n \"2018-10-08\",\n \"2019-10-08\",\n \"2020-10-08\"\n ]\n },\n \"bengali-revised 9-11\": {\n \"_name\": \"12-25\"\n },\n \"03-25\": {\n \"name\": {\n \"en\": \"Genocide Remembrance Day\"\n },\n \"type\": \"observance\"\n },\n \"11-21\": {\n \"name\": {\n \"en\": \"Armed Forces Day\"\n },\n \"type\": \"observance\"\n },\n \"12-14\": {\n \"name\": {\n \"en\": \"Martyred Intellectuals Day\"\n },\n \"type\": \"observance\"\n }\n }\n },\n \"BE\": {\n \"names\": {\n \"fr\": \"Belgique\",\n \"nl\": \"Belgi\u00EB\",\n \"de\": \"Belgien\",\n \"en\": \"Belgium\"\n },\n \"dayoff\": \"sunday\",\n \"zones\": [\n \"Europe/Brussels\"\n ],\n \"langs\": [\n \"fr\",\n \"nl\",\n \"de\"\n ],\n \"days\": {\n \"01-01\": {\n \"_name\": \"01-01\"\n },\n \"01-06\": {\n \"_name\": \"01-06\",\n \"name\": {\n \"de\": \"Erscheinung des Herrn\"\n },\n \"type\": \"observance\"\n },\n \"02-14\": {\n \"_name\": \"02-14\",\n \"type\": \"observance\"\n },\n \"easter\": {\n \"_name\": \"easter\",\n \"type\": \"observance\"\n },\n \"easter 1\": {\n \"_name\": \"easter 1\"\n },\n \"05-01\": {\n \"_name\": \"05-01\"\n },\n \"2nd sunday in May\": {\n \"_name\": \"Mothers Day\",\n \"type\": \"observance\"\n },\n \"easter 39\": {\n \"_name\": \"easter 39\"\n },\n \"easter 49\": {\n \"_name\": \"easter 49\",\n \"type\": \"observance\"\n },\n \"easter 50\": {\n \"_name\": \"easter 50\"\n },\n \"07-21\": {\n \"_name\": \"National Holiday\"\n },\n \"08-15\": {\n \"_name\": \"08-15\"\n },\n \"11-01\": {\n \"_name\": \"11-01\"\n },\n \"11-02\": {\n \"_name\": \"11-02\",\n \"type\": \"observance\"\n },\n \"11-11\": {\n \"name\": {\n \"de\": \"Waffenstillstand\",\n \"fr\": \"Armistice\",\n \"nl\": \"Wapenstilstand\"\n }\n },\n \"11-15\": {\n \"name\": {\n \"nl\": \"Koningsdag\",\n \"fr\": \"F\u00EAte du Roi\",\n \"de\": \"Festtag des K\u00F6nigs\"\n },\n \"type\": \"observance\"\n },\n \"12-06\": {\n \"_name\": \"12-06\",\n \"type\": \"observance\"\n },\n \"12-25\": {\n \"_name\": \"12-25\"\n }\n },\n \"states\": {\n \"BRU\": {\n \"name\": \"Bruxelles\",\n \"langs\": [\n \"fr\",\n \"nl\"\n ],\n \"days\": {\n \"05-08\": {\n \"name\": {\n \"nl\": \"Feest van de Iris\",\n \"fr\": \"F\u00EAte de l'Iris\"\n },\n \"type\": \"observance\"\n }\n }\n },\n \"DE\": {\n \"name\": \"Deutschsprachige Gemeinschaft\",\n \"langs\": [\n \"de\"\n ],\n \"days\": {\n \"11-15\": {\n \"name\": {\n \"de\": \"Tag der Deutschsprachigen Gemeinschaft\",\n \"fr\": \"Jour de la Communaut\u00E9 Germanophone\",\n \"nl\": \"Feestdag van de Duitstalige Gemeenschap\"\n },\n \"type\": \"observance\"\n }\n }\n },\n \"VLG\": {\n \"name\": \"Vlaamse Gemeenschap\",\n \"langs\": [\n \"nl\"\n ],\n \"days\": {\n \"07-11\": {\n \"name\": {\n \"de\": \"Festtag der Wallonischen Region\",\n \"fr\": \"F\u00EAte de la R\u00E9gion wallonne\",\n \"nl\": \"Feestdag van de Vlaamse Gemeenschap\"\n },\n \"type\": \"observance\"\n }\n }\n },\n \"WAL\": {\n \"name\": \"Communaut\u00E9 fran\u00E7aise\",\n \"langs\": [\n \"fr\"\n ],\n \"days\": {\n \"09-27\": {\n \"name\": {\n \"de\": \"Tag der Franz\u00F6sischsprachigen Gemeinschaft\",\n \"fr\": \"La f\u00EAte de la communaut\u00E9 fran\u00E7aise\",\n \"nl\": \"Feestdag van de Franse Gemeenschap\"\n },\n \"type\": \"observance\"\n }\n }\n }\n }\n },\n \"BF\": {\n \"names\": {\n \"fr\": \"Burkina Faso\",\n \"en\": \"Burkina Faso\"\n },\n \"langs\": [\n \"fr\"\n ],\n \"zones\": [\n \"Africa/Abidjan\"\n ],\n \"dayoff\": \"\",\n \"days\": {\n \"01-01\": {\n \"_name\": \"01-01\"\n },\n \"01-03\": {\n \"name\": {\n \"fr\": \"Soul\u00E8vement populaire\",\n \"en\": \"Anniversary of the 1966 Upper Voltan coup d'\u00E9tat\"\n }\n },\n \"03-08\": {\n \"_name\": \"03-08\"\n },\n \"easter\": {\n \"_name\": \"easter\"\n },\n \"easter 1\": {\n \"_name\": \"easter 1\"\n },\n \"easter 39\": {\n \"_name\": \"easter 39\"\n },\n \"easter 49\": {\n \"_name\": \"easter 49\"\n },\n \"05-01\": {\n \"_name\": \"05-01\"\n },\n \"08-05\": {\n \"_name\": \"Independence Day\"\n },\n \"08-15\": {\n \"_name\": \"08-15\"\n },\n \"11-01\": {\n \"_name\": \"11-01\"\n },\n \"12-11\": {\n \"name\": {\n \"fr\": \"F\u00EAte nationale\",\n \"en\": \"Proclamation of the Republic\"\n }\n },\n \"12-25\": {\n \"_name\": \"12-25\"\n },\n \"12 Rabi al-awwal\": {\n \"_name\": \"12 Rabi al-awwal\"\n },\n \"1 Shawwal\": {\n \"_name\": \"1 Shawwal\"\n },\n \"10 Dhu al-Hijjah\": {\n \"_name\": \"10 Dhu al-Hijjah\"\n }\n }\n },\n \"BG\": {\n \"names\": {\n \"bg\": \"\u0411\u044A\u043B\u0433\u0430\u0440\u0438\u044F\",\n \"en\": \"Bulgaria\"\n },\n \"langs\": [\n \"bg\"\n ],\n \"zones\": [\n \"Europe/Sofia\"\n ],\n \"days\": {\n \"01-01\": {\n \"_name\": \"01-01\"\n },\n \"03-01\": {\n \"name\": {\n \"bg\": \"\u0411\u0430\u0431\u0430 \u041C\u0430\u0440\u0442\u0430\",\n \"en\": \"Granny March Day\"\n },\n \"type\": \"observance\"\n },\n \"03-03\": {\n \"name\": {\n \"bg\": \"\u0414\u0435\u043D \u043D\u0430 \u041E\u0441\u0432\u043E\u0431\u043E\u0436\u0434\u0435\u043D\u0438\u0435\u0442\u043E \u043D\u0430 \u0411\u044A\u043B\u0433\u0430\u0440\u0438\u044F \u043E\u0442 \u041E\u0441\u043C\u0430\u043D\u0441\u043A\u0430\u0442\u0430 \u0418\u043C\u043F\u0435\u0440\u0438\u044F\",\n \"en\": \"Liberation Day\"\n }\n },\n \"03-08\": {\n \"_name\": \"03-08\",\n \"type\": \"observance\"\n },\n \"orthodox -2\": {\n \"_name\": \"easter -2\"\n },\n \"orthodox\": {\n \"_name\": \"easter\"\n },\n \"orthodox 1\": {\n \"_name\": \"easter 1\"\n },\n \"05-01\": {\n \"_name\": \"05-01\"\n },\n \"05-06\": {\n \"name\": {\n \"bg\": \"\u0413\u0435\u0440\u0433\u044C\u043E\u0432\u0434\u0435\u043D\",\n \"en\": \"St. George's Day\"\n }\n },\n \"05-07\": {\n \"name\": {\n \"bg\": \"\u0414\u0435\u043D \u043D\u0430 \u0440\u0430\u0434\u0438\u043E\u0442\u043E \u0438 \u0442\u0435\u043B\u0435\u0432\u0438\u0437\u0438\u044F\u0442\u0430\",\n \"en\": \"Radio and Television Day\"\n },\n \"type\": \"observance\"\n },\n \"05-24\": {\n \"name\": {\n \"bg\": \"\u0414\u0435\u043D \u043D\u0430 \u0430\u0437\u0431\u0443\u043A\u0430\u0442\u0430, \u043A\u0443\u043B\u0442\u0443\u0440\u0430\u0442\u0430 \u0438 \u043F\u0440\u043E\u0441\u0432\u0435\u0442\u0430\u0442\u0430\",\n \"en\": \"Bulgarian Education and Culture, and Slavonic Literature Day\"\n }\n },\n \"09-06\": {\n \"name\": {\n \"bg\": \"\u0414\u0435\u043D \u043D\u0430 \u0441\u044A\u0435\u0434\u0438\u043D\u0435\u043D\u0438\u0435\u0442\u043E\",\n \"en\": \"Unification Day\"\n }\n },\n \"09-22\": {\n \"_name\": \"Independence Day\"\n },\n \"11-01\": {\n \"name\": {\n \"bg\": \"\u0414\u0435\u043D \u043D\u0430 \u043D\u0430\u0440\u043E\u0434\u043D\u0438\u0442\u0435 \u0431\u0443\u0434\u0438\u0442\u0435\u043B\u0438\",\n \"en\": \"Revival Leaders' Day\"\n },\n \"type\": \"school\"\n },\n \"12-24\": {\n \"_name\": \"12-24\"\n },\n \"12-25\": {\n \"_name\": \"12-25\"\n },\n \"12-26\": {\n \"_name\": \"12-26\",\n \"type\": \"observance\"\n }\n }\n },\n \"BH\": {\n \"names\": {\n \"ar\": \"\u0645\u0645\u0644\u0643\u0629 \u0627\u0644\u0628\u062D\u0631\u064A\u0646\",\n \"en\": \"Bahrain\"\n },\n \"langs\": [\n \"ar\"\n ],\n \"zones\": [\n \"Asia/Qatar\"\n ],\n \"dayoff\": \"\",\n \"days\": {\n \"01-01\": {\n \"_name\": \"01-01\"\n },\n \"05-01\": {\n \"_name\": \"05-01\",\n \"name\": {\n \"ar\": \"\u064A\u0648\u0645 \u0627\u0644\u0639\u0645\u0627\u0644\"\n }\n },\n \"12-16\": {\n \"name\": {\n \"ar\": \"\u0627\u0644\u064A\u0648\u0645 \u0627\u0644\u0648\u0637\u0646\u064A\",\n \"en\": \"National Day\"\n }\n },\n \"12-17\": {\n \"name\": {\n \"ar\": \"\u064A\u0648\u0645 \u0627\u0644\u062C\u0644\u0648\u0633\",\n \"en\": \"Accession Day\"\n }\n },\n \"1 Muharram\": {\n \"_name\": \"1 Muharram\"\n },\n \"10 Muharram\": {\n \"_name\": \"10 Muharram\"\n },\n \"12 Rabi al-awwal\": {\n \"_name\": \"12 Rabi al-awwal\"\n },\n \"1 Shawwal\": {\n \"_name\": \"1 Shawwal\"\n },\n \"9 Dhu al-Hijjah\": {\n \"_name\": \"9 Dhu al-Hijjah\"\n },\n \"10 Dhu al-Hijjah P3D\": {\n \"_name\": \"10 Dhu al-Hijjah\"\n }\n }\n },\n \"BI\": {\n \"names\": {\n \"rn\": \"Republika y'Uburundi\",\n \"fr\": \"R\u00E9publique du Burundi\",\n \"en\": \"Burundi\"\n },\n \"dayoff\": \"sunday\",\n \"langs\": [\n \"fr\",\n \"en\"\n ],\n \"zones\": [\n \"Africa/Maputo\"\n ],\n \"days\": {\n \"01-01\": {\n \"_name\": \"01-01\"\n },\n \"02-05\": {\n \"name\": {\n \"fr\": \"Jour de l'Unit\u00E9\",\n \"en\": \"Unity Day\"\n }\n },\n \"04-06\": {\n \"name\": {\n \"fr\": \"Jour de Ntaryamira\",\n \"en\": \"Ntaryamira Day\"\n }\n },\n \"05-01\": {\n \"_name\": \"05-01\"\n },\n \"easter 39\": {\n \"_name\": \"easter 39\"\n },\n \"07-01\": {\n \"_name\": \"Independence Day\"\n },\n \"08-15\": {\n \"_name\": \"08-15\"\n },\n \"10-13\": {\n \"name\": {\n \"fr\": \"Jour de Rwagasore\",\n \"en\": \"Rwagasore Day\"\n }\n },\n \"10-21\": {\n \"name\": {\n \"fr\": \"Jour de Ndadaye\",\n \"en\": \"Ndadaye Day\"\n }\n },\n \"11-01\": {\n \"_name\": \"11-01\"\n },\n \"12-25\": {\n \"_name\": \"12-25\"\n },\n \"1 Shawwal\": {\n \"_name\": \"1 Shawwal\"\n },\n \"10 Dhu al-Hijjah\": {\n \"_name\": \"10 Dhu al-Hijjah\"\n },\n \"2015-07-24\": {\n \"_name\": \"Public Holiday\",\n \"name\": {\n \"fr\": \"Jour l'\u00E9lection des S\u00E9nateurs\"\n }\n }\n }\n },\n \"BJ\": {\n \"names\": {\n \"fr\": \"R\u00E9publique du B\u00E9nin\",\n \"en\": \"Benin\"\n },\n \"langs\": [\n \"fr\"\n ],\n \"zones\": [\n \"Africa/Lagos\"\n ],\n \"dayoff\": \"\",\n \"days\": {\n \"01-01\": {\n \"_name\": \"01-01\"\n },\n \"01-10\": {\n \"name\": {\n \"fr\": \"F\u00EAte du Vodoun\"\n }\n },\n \"easter\": {\n \"_name\": \"easter\",\n \"type\": \"observance\"\n },\n \"easter 1\": {\n \"_name\": \"easter 1\"\n },\n \"easter 39\": {\n \"_name\": \"easter 39\"\n },\n \"easter 49\": {\n \"_name\": \"easter 49\",\n \"type\": \"observance\"\n },\n \"easter 50\": {\n \"_name\": \"easter 50\"\n },\n \"05-01\": {\n \"_name\": \"05-01\"\n },\n \"08-01\": {\n \"_name\": \"Independence Day\",\n \"name\": {\n \"fr\": \"F\u00EAte Nationale\"\n }\n },\n \"08-15\": {\n \"_name\": \"08-15\"\n },\n \"11-01\": {\n \"_name\": \"11-01\"\n },\n \"12-25\": {\n \"_name\": \"12-25\"\n },\n \"1 Shawwal\": {\n \"_name\": \"1 Shawwal\"\n },\n \"10 Dhu al-Hijjah\": {\n \"_name\": \"10 Dhu al-Hijjah\"\n },\n \"12 Rabi al-awwal\": {\n \"_name\": \"12 Rabi al-awwal\"\n }\n }\n },\n \"BL\": {\n \"names\": {\n \"fr\": \"St. Barth\u00E9lemy\",\n \"en\": \"St. Barths\"\n },\n \"langs\": [\n \"fr\"\n ],\n \"zones\": [\n \"America/St_Barthelemy\"\n ],\n \"_days\": \"FR\",\n \"days\": {\n \"easter -48\": {\n \"_name\": \"easter -48\",\n \"type\": \"observance\"\n },\n \"easter -47\": {\n \"_name\": \"easter -47\",\n \"type\": \"Observance\"\n },\n \"easter -46\": {\n \"_name\": \"easter -46\",\n \"type\": \"observance\"\n },\n \"easter -21\": {\n \"name\": {\n \"fr\": \"Mi-Car\u00EAme\",\n \"en\": \"Laetare Sunday\"\n },\n \"type\": \"observance\"\n },\n \"easter -2\": {\n \"_name\": \"easter -2\",\n \"type\": \"bank\"\n },\n \"easter\": {\n \"_name\": \"easter\",\n \"type\": \"observance\"\n },\n \"08-24\": {\n \"name\": {\n \"fr\": \"F\u00EAte de Saint Barth\u00E9lemy\",\n \"en\": \"Saint Barth\"\n },\n \"type\": \"observance\"\n },\n \"10-09\": {\n \"_name\": \"Abolition of Slavery\"\n },\n \"12-25\": {\n \"_name\": \"12-25\"\n }\n }\n },\n \"BM\": {\n \"names\": {\n \"en\": \"Bermuda\"\n },\n \"langs\": [\n \"en\"\n ],\n \"zones\": [\n \"Atlantic/Bermuda\"\n ],\n \"dayoff\": \"sunday\",\n \"days\": {\n \"01-01\": {\n \"_name\": \"01-01\"\n },\n \"substitutes 01-01 if saturday, sunday then next monday\": {\n \"_name\": \"01-01\",\n \"substitute\": true,\n \"type\": \"bank\",\n \"note\": \"Goverment offices close\"\n },\n \"easter -2\": {\n \"_name\": \"easter -2\"\n },\n \"friday before 06-01\": {\n \"name\": {\n \"en\": \"Bermuda Day\"\n }\n },\n \"3nd monday in June\": {\n \"name\": {\n \"en\": \"National Heroes Day\"\n }\n },\n \"thursday before 08-04\": {\n \"name\": {\n \"en\": \"Emancipation Day\"\n }\n },\n \"friday before 08-05\": {\n \"name\": {\n \"en\": \"Somers' Day\"\n }\n },\n \"monday after 09-01\": {\n \"name\": {\n \"en\": \"Labour Day\"\n }\n },\n \"11-11\": {\n \"name\": {\n \"en\": \"Remembrance Day\"\n }\n },\n \"substitutes 11-11 if saturday, sunday then next monday\": {\n \"name\": {\n \"en\": \"Remembrance Day\"\n },\n \"substitute\": true,\n \"type\": \"bank\",\n \"note\": \"Goverment offices close\"\n },\n \"12-25\": {\n \"_name\": \"12-25\"\n },\n \"substitutes 12-25 if saturday then next monday if sunday then next tuesday\": {\n \"_name\": \"12-25\",\n \"substitute\": true,\n \"type\": \"bank\",\n \"note\": \"Goverment offices close\"\n },\n \"12-26\": {\n \"_name\": \"12-26\"\n },\n \"substitutes 12-26 if saturday then next monday if sunday then next tuesday\": {\n \"_name\": \"12-26\",\n \"substitute\": true,\n \"type\": \"bank\",\n \"note\": \"Goverment offices close\"\n }\n }\n },\n \"BN\": {\n \"names\": {\n \"ms\": \"Negara Brunei Darussalam\",\n \"en\": \"Brunei\"\n },\n \"langs\": [\n \"ms\",\n \"en\"\n ],\n \"zones\": [\n \"Asia/Brunei\"\n ],\n \"dayoff\": \"\",\n \"days\": {\n \"01-01\": {\n \"_name\": \"01-01\",\n \"name\": {\n \"ms\": \"Awal Tahun Masihi\"\n }\n },\n \"02-23\": {\n \"name\": {\n \"en\": \"National Day\",\n \"ms\": \"Hari Kebangsaan\"\n }\n },\n \"03-31\": {\n \"name\": {\n \"en\": \"Armed Forces Day\",\n \"ms\": \"Hari Angkatan Bersenjata Diraja Brunei\"\n }\n },\n \"07-15\": {\n \"name\": {\n \"en\": \"Sultan's Birthday\",\n \"ms\": \"Hari Keputeraan KDYMM Sultan Brunei\"\n }\n },\n \"1 Ramadan\": {\n \"_name\": \"1 Ramadan\"\n },\n \"17 Ramadan\": {\n \"name\": {\n \"en\": \"Nuzul Al-Quran\",\n \"ms\": \"Hari Nuzul Al-Quran\"\n }\n },\n \"1 Shawwal P3D\": {\n \"_name\": \"1 Shawwal\"\n },\n \"10 Dhu al-Hijjah\": {\n \"_name\": \"10 Dhu al-Hijjah\"\n },\n \"1 Muharram\": {\n \"_name\": \"1 Muharram\"\n },\n \"12 Rabi al-awwal\": {\n \"_name\": \"12 Rabi al-awwal\"\n },\n \"27 Rajab\": {\n \"_name\": \"27 Rajab\"\n },\n \"12-25\": {\n \"_name\": \"12-25\"\n },\n \"chinese 01-0-01\": {\n \"name\": {\n \"en\": \"Chinese New Year\",\n \"ms\": \"Tahun Baru Cina\"\n }\n }\n }\n },\n \"BO\": {\n \"names\": {\n \"es\": \"Bolivia\",\n \"en\": \"Bolivia\"\n },\n \"dayoff\": \"sunday\",\n \"langs\": [\n \"es\",\n \"qu\",\n \"ay\"\n ],\n \"zones\": [\n \"America/La_Paz\"\n ],\n \"days\": {\n \"01-01\": {\n \"_name\": \"01-01\"\n },\n \"02-02\": {\n \"name\": {\n \"en\": \"Feast of the Virgin of Candelaria\",\n \"qu\": \"Mamacha Candelaria\",\n \"es\": \"Fiesta de la Virgen de Candelaria\"\n }\n },\n \"easter -48\": {\n \"name\": {\n \"en\": \"Carnival\",\n \"es\": \"Carnaval\"\n }\n },\n \"easter -47\": {\n \"_name\": \"easter -47\"\n },\n \"easter -2\": {\n \"_name\": \"easter -2\"\n },\n \"easter\": {\n \"_name\": \"easter\",\n \"type\": \"observance\"\n },\n \"easter 39\": {\n \"_name\": \"easter 39\"\n },\n \"06-21\": {\n \"name\": {\n \"en\": \"Andean New Year\",\n \"ay\": \"Willkakuti\",\n \"es\": \"A\u00F1o Nuevo Andino\"\n }\n },\n \"08-02\": {\n \"name\": {\n \"en\": \"Agrarian Reform Day\",\n \"es\": \"D\u00EDa de la Revoluci\u00F3n Agraria, Productiva y Comunitaria\"\n }\n },\n \"08-06\": {\n \"_name\": \"Independence Day\",\n \"name\": {\n \"es\": \"D\u00EDa de la Patria\"\n }\n },\n \"11-02\": {\n \"_name\": \"11-02\"\n },\n \"12-25\": {\n \"_name\": \"12-25\"\n }\n }\n },\n \"BQ\": {\n \"names\": {\n \"nl\": \"Caribisch Nederland\",\n \"en\": \"Caribbean Netherlands\"\n },\n \"dayoff\": \"sunday\",\n \"zones\": [\n \"America/Curacao\"\n ],\n \"langs\": [\n \"nl\",\n \"en\",\n \"pap\"\n ],\n \"days\": {\n \"01-01\": {\n \"_name\": \"01-01\"\n },\n \"easter -2\": {\n \"_name\": \"easter -2\"\n },\n \"easter\": {\n \"_name\": \"easter\",\n \"type\": \"observance\"\n },\n \"easter 1\": {\n \"_name\": \"easter 1\"\n },\n \"04-27\": {\n \"name\": {\n \"pap\": \"A\u00F1a di Rey\",\n \"nl\": \"Koningsdag\",\n \"en\": \"Kings Day\"\n }\n },\n \"05-01 if sunday then next monday\": {\n \"substitute\": true,\n \"_name\": \"05-01\"\n },\n \"2nd sunday in May\": {\n \"_name\": \"Mothers Day\",\n \"type\": \"observance\"\n },\n \"3rd sunday in June\": {\n \"_name\": \"Fathers Day\",\n \"type\": \"observance\"\n },\n \"easter 39\": {\n \"_name\": \"easter 39\"\n },\n \"12-05\": {\n \"name\": {\n \"nl\": \"Sinterklaasavond\",\n \"en\": \"St. Nicholas' Eve\"\n },\n \"type\": \"observance\"\n },\n \"12-15\": {\n \"name\": {\n \"pap\": \"Dia di Reino\",\n \"nl\": \"Koninkrijksdag\",\n \"en\": \"Kingdom Day\"\n }\n },\n \"12-25\": {\n \"_name\": \"12-25\"\n },\n \"12-26\": {\n \"_name\": \"12-26\"\n }\n },\n \"regions\": {\n \"BO\": {\n \"name\": \"Bonaire\",\n \"days\": {\n \"easter -48\": {\n \"_name\": \"easter -48\",\n \"name\": {\n \"en\": \"Carnival Monday\"\n }\n },\n \"04-30\": {\n \"name\": {\n \"en\": \"Rincon Day\",\n \"pap\": \"Dia di Rincon\"\n }\n },\n \"09-06\": {\n \"name\": {\n \"nl\": \"Boneiru Dag\",\n \"en\": \"Bonaire Day\",\n \"pap\": \"Dia di Boneiru\"\n }\n }\n }\n },\n \"SA\": {\n \"name\": \"Saba\",\n \"days\": {\n \"1st monday in August\": {\n \"_name\": \"easter -48\",\n \"name\": {\n \"en\": \"Carnival Monday\"\n }\n },\n \"1st friday in December\": {\n \"name\": {\n \"en\": \"Saba Day\"\n }\n }\n }\n },\n \"SE\": {\n \"name\": \"Sint Eustatius\",\n \"days\": {\n \"08-01\": {\n \"name\": {\n \"en\": \"Emancipation Day\"\n }\n },\n \"11-16\": {\n \"name\": {\n \"en\": \"Statia Day\"\n }\n }\n }\n }\n }\n },\n \"BR\": {\n \"names\": {\n \"pt\": \"Brasil\",\n \"en\": \"Brazil\"\n },\n \"dayoff\": \"sunday\",\n \"langs\": [\n \"pt\"\n ],\n \"zones\": [\n \"America/Sao_Paulo\",\n \"America/Noronha\",\n \"America/Belem\",\n \"America/Fortaleza\",\n \"America/Recife\",\n \"America/Araguaina\",\n \"America/Maceio\",\n \"America/Bahia\",\n \"America/Campo_Grande\",\n \"America/Cuiaba\",\n \"America/Santarem\",\n \"America/Porto_Velho\",\n \"America/Boa_Vista\",\n \"America/Manaus\",\n \"America/Eirunepe\",\n \"America/Rio_Branco\"\n ],\n \"days\": {\n \"01-01\": {\n \"_name\": \"01-01\"\n },\n \"04-21\": {\n \"name\": {\n \"pt\": \"Dia de Tiradentes\",\n \"en\": \"Tiradentes' Day\"\n }\n },\n \"easter -50 PT110H\": {\n \"name\": {\n \"pt\": \"Carnaval\",\n \"en\": \"Carnival\"\n },\n \"type\": \"optional\"\n },\n \"easter -2\": {\n \"_name\": \"easter -2\"\n },\n \"easter\": {\n \"_name\": \"easter\",\n \"type\": \"observance\"\n },\n \"05-01\": {\n \"_name\": \"05-01\"\n },\n \"2nd sunday in May\": {\n \"_name\": \"Mothers Day\",\n \"type\": \"observance\"\n },\n \"easter 60\": {\n \"_name\": \"easter 60\",\n \"type\": \"optional\"\n },\n \"06-12\": {\n \"name\": {\n \"pt\": \"Dia dos Namorados\",\n \"en\": \"Lovers' Day\"\n },\n \"type\": \"observance\"\n },\n \"2nd sunday in August\": {\n \"_name\": \"Fathers Day\",\n \"type\": \"observance\"\n },\n \"09-07\": {\n \"_name\": \"Independence Day\"\n },\n \"10-12\": {\n \"name\": {\n \"pt\": \"Nossa Senhora Aparecida\",\n \"en\": \"Our Lady of Aparecida\"\n }\n },\n \"1st sunday in October in even years\": {\n \"name\": {\n \"pt\": \"Dia de Elei\u00E7\u00E3o\",\n \"en\": \"Election Day\"\n }\n },\n \"1st sunday before 11-01 in even years\": {\n \"name\": {\n \"pt\": \"Dia de Elei\u00E7\u00E3o\",\n \"en\": \"Election Day\"\n }\n },\n \"11-02\": {\n \"_name\": \"11-02\"\n },\n \"11-15\": {\n \"name\": {\n \"pt\": \"Proclama\u00E7\u00E3o da Rep\u00FAblica\",\n \"en\": \"Republic Day\"\n }\n },\n \"12-24 14:00\": {\n \"_name\": \"12-24\",\n \"type\": \"optional\"\n },\n \"12-25\": {\n \"_name\": \"12-25\"\n },\n \"12-31 14:00\": {\n \"_name\": \"12-31\",\n \"type\": \"optional\"\n }\n },\n \"states\": {\n \"AC\": {\n \"name\": \"Acre\",\n \"zones\": [\n \"America/Rio_Branco\"\n ],\n \"days\": {\n \"01-12\": {\n \"name\": {\n \"pt\": \"Dia do evang\u00E9lico\"\n },\n \"active\": [\n {\n \"from\": \"2004-01-29T00:00:00.000Z\"\n }\n ]\n },\n \"03-08\": {\n \"name\": {\n \"pt\": \"Alusivo ao Dia Internacional da Mulher\"\n },\n \"active\": [\n {\n \"from\": \"2001-09-14T00:00:00.000Z\"\n }\n ]\n },\n \"06-15\": {\n \"name\": {\n \"pt\": \"Anivers\u00E1rio do estado\"\n },\n \"active\": [\n {\n \"from\": \"1964-09-02T00:00:00.000Z\"\n }\n ]\n },\n \"09-05\": {\n \"name\": {\n \"pt\": \"Dia da Amaz\u00F4nia\"\n },\n \"active\": [\n {\n \"from\": \"2004-01-05T00:00:00.000Z\"\n }\n ]\n },\n \"11-17\": {\n \"name\": {\n \"pt\": \"Assinatura do Tratado de Petr\u00F3polis\"\n },\n \"type\": \"optional\",\n \"active\": [\n {\n \"from\": \"2012-02-21T00:00:00.000Z\"\n }\n ]\n }\n }\n },\n \"AL\": {\n \"name\": \"Alagoas\",\n \"zones\": [\n \"America/Maceio\"\n ],\n \"days\": {\n \"06-24\": {\n \"name\": {\n \"pt\": \"S\u00E3o Jo\u00E3o\"\n },\n \"active\": [\n {\n \"from\": \"1993-07-07T00:00:00.000Z\"\n }\n ]\n },\n \"06-29\": {\n \"name\": {\n \"pt\": \"S\u00E3o Pedro\"\n },\n \"active\": [\n {\n \"from\": \"1993-07-07T00:00:00.000Z\"\n }\n ]\n },\n \"09-16\": {\n \"name\": {\n \"pt\": \"Emancipa\u00E7\u00E3o pol\u00EDtica\"\n }\n },\n \"11-20\": {\n \"name\": {\n \"pt\": \"Morte de Zumbi dos Palmares\"\n },\n \"active\": [\n {\n \"from\": \"1995-08-01T00:00:00.000Z\"\n }\n ]\n }\n }\n },\n \"AM\": {\n \"name\": \"Amazonas\",\n \"zones\": [\n \"America/Manaus\"\n ],\n \"days\": {\n \"09-05\": {\n \"name\": {\n \"pt\": \"Eleva\u00E7\u00E3o do Amazonas \u00E0 categoria de prov\u00EDncia\"\n },\n \"active\": [\n {\n \"from\": \"1977-12-21T00:00:00.000Z\"\n }\n ]\n },\n \"11-20\": {\n \"name\": {\n \"pt\": \"Dia da Consci\u00EAncia Negra\"\n },\n \"active\": [\n {\n \"from\": \"2010-07-08T00:00:00.000Z\"\n }\n ]\n }\n }\n },\n \"AP\": {\n \"name\": \"Amap\u00E1\",\n \"zones\": [\n \"America/Belem\"\n ],\n \"days\": {\n \"03-19\": {\n \"name\": {\n \"pt\": \"Dia de S\u00E3o Jos\u00E9\"\n },\n \"note\": \"Santo padroeiro do Estado do Amap\u00E1\",\n \"active\": [\n {\n \"from\": \"2002-04-16T00:00:00.000Z\"\n }\n ]\n },\n \"09-13\": {\n \"name\": {\n \"pt\": \"Cria\u00E7\u00E3o do Territ\u00F3rio Federal\"\n }\n }\n }\n },\n \"BA\": {\n \"name\": \"Bahia\",\n \"zones\": [\n \"America/Bahia\"\n ],\n \"days\": {\n \"07-02\": {\n \"name\": {\n \"pt\": \"Independ\u00EAncia da Bahia\"\n }\n }\n }\n },\n \"CE\": {\n \"name\": \"Cear\u00E1\",\n \"zones\": [\n \"America/Fortaleza\"\n ],\n \"days\": {\n \"03-25\": {\n \"name\": {\n \"pt\": \"Data magna do estado\"\n },\n \"active\": [\n {\n \"from\": \"2011-12-01T00:00:00.000Z\"\n }\n ]\n }\n }\n },\n \"DF\": {\n \"name\": \"Distrito Federal\",\n \"zones\": [\n \"America/Sao_Paulo\"\n ],\n \"days\": {\n \"04-21\": {\n \"name\": {\n \"pt\": \"Funda\u00E7\u00E3o de Bras\u00EDlia\"\n }\n },\n \"11-30\": {\n \"name\": {\n \"pt\": \"Dia do Evang\u00E9lico\"\n },\n \"type\": \"public\",\n \"active\": [\n {\n \"from\": \"1995-12-04T00:00:00.000Z\"\n }\n ]\n }\n }\n },\n \"MA\": {\n \"name\": \"Maranh\u00E3o\",\n \"zones\": [\n \"America/Belem\"\n ],\n \"days\": {\n \"07-28\": {\n \"name\": {\n \"pt\": \"Ades\u00E3o do Maranh\u00E3o \u00E0 independ\u00EAncia do Brasil\"\n },\n \"active\": [\n {\n \"from\": \"1964-10-02T00:00:00.000Z\"\n }\n ]\n }\n }\n },\n \"MG\": {\n \"name\": \"Minas Gerais\",\n \"zones\": [\n \"America/Sao_Paulo\"\n ],\n \"days\": {\n \"04-21\": {\n \"name\": {\n \"pt\": \"Data magna do estado\"\n }\n }\n },\n \"regions\": {\n \"BH\": {\n \"name\": \"Belo Horizonte\",\n \"days\": {\n \"08-15\": {\n \"_name\": \"08-15\",\n \"name\": {\n \"pt\": \"Assun\u00E7\u00E3o de Nossa Senhora\"\n },\n \"type\": \"public\"\n },\n \"12-08\": {\n \"_name\": \"12-08\",\n \"type\": \"public\"\n }\n }\n }\n }\n },\n \"MS\": {\n \"name\": \"Mato Grosso do Sul\",\n \"zones\": [\n \"America/Campo_Grande\"\n ],\n \"days\": {\n \"10-11\": {\n \"name\": {\n \"pt\": \"Cria\u00E7\u00E3o do estado\"\n },\n \"active\": [\n {\n \"from\": \"1979-10-29T00:00:00.000Z\"\n }\n ]\n }\n }\n },\n \"MT\": {\n \"name\": \"Mato Grosso\",\n \"zones\": [\n \"America/Cuiaba\"\n ],\n \"days\": {\n \"11-20\": {\n \"name\": {\n \"pt\": \"Dia da Consci\u00EAncia Negra\"\n },\n \"active\": [\n {\n \"from\": \"2002-12-27T00:00:00.000Z\"\n }\n ]\n }\n }\n },\n \"PA\": {\n \"name\": \"Par\u00E1\",\n \"zones\": [\n \"America/Santarem\"\n ],\n \"days\": {\n \"08-15\": {\n \"name\": {\n \"pt\": \"Ades\u00E3o do Gr\u00E3o-Par\u00E1 \u00E0 independ\u00EAncia do Brasil\"\n },\n \"active\": [\n {\n \"from\": \"1996-09-10T00:00:00.000Z\"\n }\n ]\n }\n }\n },\n \"PB\": {\n \"name\": \"Para\u00EDba\",\n \"zones\": [\n \"America/Recife\"\n ],\n \"days\": {\n \"07-26\": {\n \"name\": {\n \"pt\": \"Homenagem \u00E0 mem\u00F3ria do ex-presidente Jo\u00E3o Pessoa\"\n }\n },\n \"08-05\": {\n \"name\": {\n \"pt\": \"Nossa Senhora das Neves\"\n },\n \"note\": \"Funda\u00E7\u00E3o do Estado em 1585 e dia da sua padroeira\",\n \"active\": [\n {\n \"from\": \"1967-08-30T00:00:00.000Z\"\n }\n ]\n }\n }\n },\n \"PE\": {\n \"name\": \"Pernambuco\",\n \"zones\": [\n \"America/Recife\"\n ],\n \"days\": {\n \"1st sunday in March\": {\n \"name\": {\n \"pt\": \"Revolu\u00E7\u00E3o Pernambucana de 1817\"\n },\n \"active\": [\n {\n \"from\": \"2009-07-02T00:00:00.000Z\"\n }\n ]\n }\n },\n \"regions\": {\n \"RE\": {\n \"name\": \"Recife\",\n \"days\": {\n \"06-24\": {\n \"name\": {\n \"pt\": \"S\u00E3o Jo\u00E3o\",\n \"en\": \"Saint John's Day\"\n },\n \"type\": \"public\"\n },\n \"07-16\": {\n \"name\": {\n \"pt\": \"Nossa Senhora do Carmo\"\n },\n \"type\": \"public\"\n },\n \"12-08\": {\n \"_name\": \"12-08\",\n \"name\": {\n \"pt\": \"Nossa Senhora da Concei\u00E7\u00E3o\"\n },\n \"type\": \"public\"\n }\n }\n }\n }\n },\n \"PI\": {\n \"name\": \"Piau\u00ED\",\n \"zones\": [\n \"America/Fortaleza\"\n ],\n \"days\": {\n \"10-19\": {\n \"name\": {\n \"pt\": \"Dia do Piau\u00ED\"\n },\n \"active\": [\n {\n \"from\": \"1937-01-01T00:00:00.000Z\"\n }\n ]\n }\n }\n },\n \"PR\": {\n \"name\": \"Paran\u00E1\",\n \"zones\": [\n \"America/Sao_Paulo\"\n ],\n \"days\": {\n \"12-19\": {\n \"name\": {\n \"pt\": \"Emancipa\u00E7\u00E3o pol\u00EDtica do estado do Paran\u00E1\"\n },\n \"active\": [\n {\n \"from\": \"1962-12-18T00:00:00.000Z\"\n }\n ]\n }\n },\n \"regions\": {\n \"CU\": {\n \"name\": \"Curitiba\",\n \"days\": {\n \"09-08\": {\n \"name\": {\n \"pt\": \"Nossa Senhora da Luz dos Pinhais\"\n },\n \"type\": \"public\"\n }\n }\n }\n }\n },\n \"RJ\": {\n \"name\": \"Rio de Janeiro\",\n \"zones\": [\n \"America/Sao_Paulo\"\n ],\n \"days\": {\n \"easter -47\": {\n \"name\": {\n \"pt\": \"Carnaval\"\n },\n \"active\": [\n {\n \"from\": \"2008-05-14T00:00:00.000Z\"\n }\n ]\n },\n \"04-23\": {\n \"name\": {\n \"pt\": \"Dia de S\u00E3o Jorge\"\n },\n \"active\": [\n {\n \"from\": \"2008-03-05T00:00:00.000Z\"\n }\n ]\n },\n \"3rd tuesday in October\": {\n \"name\": {\n \"pt\": \"Dia do Com\u00E9rcio\"\n },\n \"type\": \"observance\",\n \"note\": \"feriado para os comerciantes e trabalhadores da constru\u00E7\u00E3o civil\"\n },\n \"11-20\": {\n \"name\": {\n \"pt\": \"Dia da Consci\u00EAncia Negra\"\n },\n \"active\": [\n {\n \"from\": \"2002-11-11T00:00:00.000Z\"\n }\n ]\n }\n }\n },\n \"RN\": {\n \"name\": \"Rio Grande do Norte\",\n \"zones\": [\n \"America/Recife\"\n ],\n \"days\": {\n \"10-03\": {\n \"name\": {\n \"pt\": \"M\u00E1rtires de Cunha\u00FA e Urua\u00E7u\"\n },\n \"active\": [\n {\n \"from\": \"2006-12-06T00:00:00.000Z\"\n }\n ]\n }\n }\n },\n \"RO\": {\n \"name\": \"Rond\u00F4nia\",\n \"zones\": [\n \"America/Porto_Velho\"\n ],\n \"days\": {\n \"01-04\": {\n \"name\": {\n \"pt\": \"Cria\u00E7\u00E3o do estado\"\n },\n \"active\": [\n {\n \"from\": \"2010-04-22T00:00:00.000Z\"\n }\n ]\n },\n \"06-18\": {\n \"name\": {\n \"pt\": \"Dia do evang\u00E9lico\"\n },\n \"active\": [\n {\n \"from\": \"2001-12-20T00:00:00.000Z\"\n }\n ]\n }\n }\n },\n \"RR\": {\n \"name\": \"Roraima\",\n \"zones\": [\n \"America/Boa_Vista\"\n ],\n \"days\": {\n \"10-05\": {\n \"name\": {\n \"pt\": \"Cria\u00E7\u00E3o do estado\"\n }\n }\n }\n },\n \"RS\": {\n \"name\": \"Rio Grande do Sul\",\n \"zones\": [\n \"America/Sao_Paulo\"\n ],\n \"days\": {\n \"09-20\": {\n \"name\": {\n \"pt\": \"Proclama\u00E7\u00E3o da Rep\u00FAblica Rio-Grandense\"\n }\n }\n }\n },\n \"SC\": {\n \"name\": \"Santa Catarina\",\n \"zones\": [\n \"America/Sao_Paulo\"\n ],\n \"days\": {\n \"08-11\": {\n \"name\": {\n \"pt\": \"Dia de Santa Catarina\"\n },\n \"active\": [\n {\n \"from\": \"2004-01-22T00:00:00.000Z\",\n \"to\": \"2005-07-15T00:00:00.000Z\"\n }\n ]\n },\n \"08-11 if monday,tuesday,wednesday,thursday,friday,saturday then next sunday\": {\n \"name\": {\n \"pt\": \"Dia de Santa Catarina\"\n },\n \"active\": [\n {\n \"from\": \"2005-07-15T00:00:00.000Z\"\n }\n ]\n },\n \"11-25\": {\n \"name\": {\n \"pt\": \"Dia de Santa Catarina de Alexandria\"\n },\n \"active\": [\n {\n \"from\": \"1996-12-26T00:00:00.000Z\",\n \"to\": \"2005-07-15T00:00:00.000Z\"\n }\n ]\n },\n \"11-25 if monday,tuesday,wednesday,thursday,friday,saturday then next sunday\": {\n \"name\": {\n \"pt\": \"Dia de Santa Catarina de Alexandria\"\n },\n \"active\": [\n {\n \"from\": \"2005-07-15T00:00:00.000Z\"\n }\n ]\n }\n }\n },\n \"SE\": {\n \"name\": \"Sergipe\",\n \"zones\": [\n \"America/Recife\"\n ],\n \"days\": {\n \"07-08\": {\n \"name\": {\n \"pt\": \"Emancipa\u00E7\u00E3o pol\u00EDtica de Sergipe\"\n }\n }\n }\n },\n \"SP\": {\n \"name\": \"S\u00E3o Paulo\",\n \"zones\": [\n \"America/Sao_Paulo\"\n ],\n \"days\": {\n \"07-09\": {\n \"name\": {\n \"pt\": \"Revolu\u00E7\u00E3o Constitucionalista\"\n },\n \"active\": [\n {\n \"from\": \"1997-03-05T00:00:00.000Z\"\n }\n ]\n }\n },\n \"regions\": {\n \"SP\": {\n \"name\": \"S\u00E3o Paulo\",\n \"days\": {\n \"01-25\": {\n \"name\": {\n \"pt\": \"Anivers\u00E1rio da Cidade\",\n \"en\": \"City Birthday\"\n },\n \"type\": \"public\"\n }\n }\n }\n }\n },\n \"TO\": {\n \"name\": \"Tocantins\",\n \"zones\": [\n \"America/Araguaina\"\n ],\n \"days\": {\n \"10-05\": {\n \"name\": {\n \"pt\": \"Cria\u00E7\u00E3o do estado\"\n },\n \"active\": [\n {\n \"from\": \"1989-11-17T00:00:00.000Z\"\n }\n ]\n },\n \"03-18\": {\n \"name\": {\n \"pt\": \"Autonomia do Estado\"\n },\n \"active\": [\n {\n \"from\": \"1998-03-17T00:00:00.000Z\"\n }\n ]\n },\n \"09-08\": {\n \"name\": {\n \"pt\": \"Nossa Senhora da Natividade\"\n },\n \"note\": \"Padroeira do Estado\",\n \"active\": [\n {\n \"from\": \"1993-12-28T00:00:00.000Z\"\n }\n ]\n }\n }\n }\n }\n },\n \"BS\": {\n \"names\": {\n \"en\": \"Bahamas\"\n },\n \"dayoff\": \"sunday\",\n \"langs\": [\n \"en\"\n ],\n \"zones\": [\n \"America/Nassau\"\n ],\n \"days\": {\n \"01-01\": {\n \"_name\": \"01-01\"\n },\n \"01-10 and if saturday,sunday then next monday\": {\n \"substitute\": true,\n \"name\": {\n \"en\": \"Majority Rule Day\"\n }\n },\n \"easter -2\": {\n \"_name\": \"easter -2\"\n },\n \"easter\": {\n \"_name\": \"easter\",\n \"type\": \"observance\"\n },\n \"easter 1\": {\n \"_name\": \"easter 1\"\n },\n \"2nd sunday in May\": {\n \"_name\": \"Mothers Day\",\n \"type\": \"observance\"\n },\n \"easter 49\": {\n \"_name\": \"easter 49\",\n \"type\": \"observance\"\n },\n \"easter 50\": {\n \"_name\": \"easter 50\"\n },\n \"1st friday in June\": {\n \"_name\": \"05-01\",\n \"name\": {\n \"en\": \"Randol Fawkes Labour Day\"\n }\n },\n \"07-10 and if saturday,sunday then next monday\": {\n \"substitute\": true,\n \"_name\": \"Independence Day\"\n },\n \"1st monday in August\": {\n \"name\": {\n \"en\": \"Emancipation Day\"\n }\n },\n \"10-12 and if saturday,sunday then next monday\": {\n \"substitute\": true,\n \"name\": {\n \"en\": \"National Heroes' Day\"\n }\n },\n \"12-25\": {\n \"_name\": \"12-25\"\n },\n \"12-26\": {\n \"_name\": \"12-26\"\n }\n }\n },\n \"BW\": {\n \"names\": {\n \"en\": \"Botswana\"\n },\n \"dayoff\": \"sunday\",\n \"langs\": [\n \"en\"\n ],\n \"zones\": [\n \"Africa/Maputo\"\n ],\n \"days\": {\n \"01-01\": {\n \"_name\": \"01-01\",\n \"note\": \"except mining industy\"\n },\n \"01-02\": {\n \"name\": {\n \"en\": \"New Year's Holiday\"\n },\n \"note\": \"except mining industy\"\n },\n \"substitutes 01-02 if monday then next tuesday\": {\n \"name\": {\n \"en\": \"Public Holiday\"\n },\n \"note\": \"except mining industy\"\n },\n \"easter -2\": {\n \"_name\": \"easter -2\"\n },\n \"easter -1\": {\n \"_name\": \"easter -1\",\n \"note\": \"except mining industy\"\n },\n \"easter\": {\n \"_name\": \"easter\",\n \"type\": \"observance\"\n },\n \"easter 1\": {\n \"_name\": \"easter 1\",\n \"note\": \"except mining industy\"\n },\n \"easter 39\": {\n \"_name\": \"easter 39\",\n \"note\": \"except mining industy\"\n },\n \"05-01\": {\n \"_name\": \"05-01\",\n \"note\": \"except mining industy\"\n },\n \"substitutes 05-01 if sunday then next monday\": {\n \"name\": {\n \"en\": \"Public Holiday\"\n },\n \"note\": \"except mining industy\"\n },\n \"2nd sunday in May\": {\n \"_name\": \"Mothers Day\",\n \"type\": \"observance\"\n },\n \"07-01\": {\n \"name\": {\n \"en\": \"Sir Seretse Khama Day\"\n },\n \"note\": \"except mining industy\"\n },\n \"substitutes 07-01 if sunday then next monday\": {\n \"name\": {\n \"en\": \"Public Holiday\"\n },\n \"note\": \"except mining industy\"\n },\n \"3rd monday in July\": {\n \"name\": {\n \"en\": \"President\u2019s Day\"\n },\n \"note\": \"except mining industy\"\n },\n \"tuesday after 3rd monday in July\": {\n \"name\": {\n \"en\": \"President\u2019s Day Holiday\"\n },\n \"note\": \"except mining industy\"\n },\n \"09-30\": {\n \"name\": {\n \"en\": \"Botswana Day\"\n }\n },\n \"substitutes 09-30 if saturday,sunday then next monday\": {\n \"name\": {\n \"en\": \"Public Holiday\"\n }\n },\n \"12-25\": {\n \"_name\": \"12-25\"\n },\n \"12-26\": {\n \"_name\": \"12-26\",\n \"name\": {\n \"en\": \"Family Day\"\n },\n \"note\": \"except mining industy\"\n },\n \"substitutes 12-26 if monday then next tuesday\": {\n \"name\": {\n \"en\": \"Public Holiday\"\n }\n }\n }\n },\n \"BY\": {\n \"names\": {\n \"be\": \"\u0420\u044D\u0441\u043F\u0443\u0431\u043B\u0456\u043A\u0430 \u0411\u0435\u043B\u0430\u0440\u0443\u0441\u044C\",\n \"ru\": \"\u0420\u0435\u0441\u043F\u0443\u0431\u043B\u0438\u043A\u0430 \u0411\u0435\u043B\u0430\u0440\u0443\u0441\u044C\",\n \"en\": \"Belarus\"\n },\n \"zones\": [\n \"Europe/Minsk\"\n ],\n \"langs\": [\n \"be\",\n \"ru\"\n ],\n \"days\": {\n \"01-01\": {\n \"_name\": \"01-01\"\n },\n \"julian 12-25\": {\n \"_name\": \"12-25\",\n \"name\": {\n \"be\": \"\u041A\u0430\u043B\u044F\u0434\u044B \u043F\u0440\u0430\u0432\u0430\u0441\u043B\u0430\u045E\u043D\u044B\u044F\"\n }\n },\n \"easter\": {\n \"_name\": \"easter\",\n \"name\": {\n \"be\": \"\u0412\u044F\u043Bi\u043A\u0434\u0437\u0435\u043D\u044C \u043A\u0430\u0442\u0430\u043Bi\u0446\u043Ai\"\n },\n \"type\": \"observance\"\n },\n \"orthodox\": {\n \"name\": {\n \"en\": \"Orthodox Easter\",\n \"be\": \"\u0412\u044F\u043Bi\u043A\u0434\u0437\u0435\u043D\u044C \u043F\u0440\u0430\u0432\u0430\u0441\u043B\u0430\u045E\u043D\u044B\"\n },\n \"type\": \"observance\"\n },\n \"orthodox +9\": {\n \"name\": {\n \"en\": \"Commemoration Day\",\n \"be\": \"\u0420\u0430\u0434\u0443\u043Di\u0446\u0430\"\n }\n },\n \"03-08\": {\n \"_name\": \"03-08\"\n },\n \"05-01\": {\n \"_name\": \"05-01\"\n },\n \"05-09\": {\n \"name\": {\n \"en\": \"Victory Day\",\n \"be\": \"\u0414\u0437\u0435\u043D\u044C \u041F\u0435\u0440\u0430\u043C\u043E\u0433i\"\n }\n },\n \"07-03\": {\n \"_name\": \"Independence Day\",\n \"active\": [\n {\n \"from\": 1996\n }\n ]\n },\n \"11-07\": {\n \"name\": {\n \"en\": \"October Revolution Day\",\n \"be\": \"\u0414\u0437\u0435\u043D\u044C \u041A\u0430\u0441\u0442\u0440\u044B\u0447\u043D\u0456\u0446\u043A\u0430\u0439 \u0440\u044D\u0432\u0430\u043B\u044E\u0446\u044B\u0456\"\n }\n },\n \"12-25\": {\n \"_name\": \"12-25\",\n \"name\": {\n \"be\": \"\u041A\u0430\u043B\u044F\u0434\u044B \u043A\u0430\u0442\u0430\u043Bi\u0446\u043Ai\u044F\"\n }\n }\n }\n },\n \"BZ\": {\n \"names\": {\n \"en\": \"Belize\"\n },\n \"dayoff\": \"sunday\",\n \"langs\": [\n \"en\"\n ],\n \"zones\": [\n \"America/Belize\"\n ],\n \"days\": {\n \"01-01\": {\n \"_name\": \"01-01\"\n },\n \"03-09 if friday,saturday,sunday then next monday if tuesday,wednesday,thursday then previous monday\": {\n \"name\": {\n \"en\": \"Baron Bliss Day\"\n }\n },\n \"easter -2\": {\n \"_name\": \"easter -2\"\n },\n \"easter -1\": {\n \"_name\": \"easter -1\"\n },\n \"easter\": {\n \"_name\": \"easter\",\n \"type\": \"observance\"\n },\n \"easter 1\": {\n \"_name\": \"easter 1\"\n },\n \"05-01 if sunday then next monday\": {\n \"_name\": \"05-01\"\n },\n \"05-24 if friday,saturday,sunday then next monday if tuesday,wednesday,thursday then previous monday\": {\n \"name\": {\n \"en\": \"Commonwealth Day, Sovereign's Day\"\n }\n },\n \"09-10 if sunday then next monday\": {\n \"name\": {\n \"en\": \"Saint George's Caye Day, National Day\"\n }\n },\n \"09-21 if sunday then next monday\": {\n \"_name\": \"Independence Day\"\n },\n \"10-12 if friday,saturday,sunday then next monday if tuesday,wednesday,thursday then previous monday\": {\n \"name\": {\n \"en\": \"Day of the Americas\"\n }\n },\n \"11-19 if sunday then next monday\": {\n \"name\": {\n \"en\": \"Garifuna Settlement Day\"\n }\n },\n \"12-25 and if sunday then next tuesday\": {\n \"_name\": \"12-25\",\n \"substitute\": true\n },\n \"12-26 and if sunday then next monday\": {\n \"_name\": \"12-26\",\n \"substitute\": true\n }\n }\n },\n \"CA\": {\n \"names\": {\n \"en\": \"Canada\",\n \"fr\": \"Canada\"\n },\n \"zones\": [\n \"America/Toronto\",\n \"America/St_Johns\",\n \"America/Halifax\",\n \"America/Glace_Bay\",\n \"America/Moncton\",\n \"America/Goose_Bay\",\n \"America/Blanc-Sablon\",\n \"America/Nipigon\",\n \"America/Thunder_Bay\",\n \"America/Iqaluit\",\n \"America/Pangnirtung\",\n \"America/Resolute\",\n \"America/Atikokan\",\n \"America/Rankin_Inlet\",\n \"America/Winnipeg\",\n \"America/Rainy_River\",\n \"America/Regina\",\n \"America/Swift_Current\",\n \"America/Edmonton\",\n \"America/Cambridge_Bay\",\n \"America/Yellowknife\",\n \"America/Inuvik\",\n \"America/Creston\",\n \"America/Dawson_Creek\",\n \"America/Fort_Nelson\",\n \"America/Vancouver\",\n \"America/Whitehorse\",\n \"America/Dawson\"\n ],\n \"langs\": [\n \"en\",\n \"fr\"\n ],\n \"days\": {\n \"01-01\": {\n \"_name\": \"01-01\"\n },\n \"02-02\": {\n \"name\": {\n \"en\": \"Groundhog Day\",\n \"fr\": \"Jour de la marmotte\"\n },\n \"type\": \"observance\"\n },\n \"02-14\": {\n \"_name\": \"02-14\",\n \"type\": \"observance\"\n },\n \"03-17\": {\n \"name\": {\n \"en\": \"St. Patrick\u2019s Day\",\n \"fr\": \"F\u00EAte de la Saint-Patrick\"\n },\n \"type\": \"observance\"\n },\n \"easter -2\": {\n \"_name\": \"easter -2\"\n },\n \"easter\": {\n \"_name\": \"easter\"\n },\n \"2nd sunday after 05-01\": {\n \"_name\": \"Mothers Day\",\n \"type\": \"observance\"\n },\n \"monday before 05-25\": {\n \"name\": {\n \"en\": \"Victoria Day\",\n \"fr\": \"F\u00EAte de la Reine\"\n }\n },\n \"3rd sunday after 06-01\": {\n \"_name\": \"Fathers Day\",\n \"type\": \"observance\"\n },\n \"07-01\": {\n \"name\": {\n \"en\": \"Canada Day\",\n \"fr\": \"F\u00EAte du Canada\"\n }\n },\n \"monday after 08-01\": {\n \"name\": {\n \"en\": \"Civic Holiday\",\n \"fr\": \"Premier lundi d\u2019ao\u00FBt\"\n }\n },\n \"1st monday in September\": {\n \"_name\": \"05-01\"\n },\n \"09-30 since 2021\": {\n \"name\": {\n \"en\": \"National Day for Truth and Reconciliation\",\n \"fr\": \"Journ\u00E9e nationale de la v\u00E9rit\u00E9 et de la r\u00E9conciliation\"\n }\n },\n \"2nd monday after 10-01\": {\n \"name\": {\n \"en\": \"Thanksgiving\",\n \"fr\": \"Action de gr\u00E2ce\"\n }\n },\n \"10-31 18:00\": {\n \"name\": {\n \"en\": \"Halloween\",\n \"fr\": \"l'Halloween\"\n },\n \"type\": \"observance\"\n },\n \"11-11\": {\n \"name\": {\n \"en\": \"Remembrance Day\",\n \"fr\": \"Jour du Souvenir\"\n }\n },\n \"12-25\": {\n \"_name\": \"12-25\"\n },\n \"12-26\": {\n \"_name\": \"12-26\"\n }\n },\n \"states\": {\n \"AB\": {\n \"name\": \"Alberta\",\n \"zones\": [\n \"America/Edmonton\"\n ],\n \"days\": {\n \"3rd monday after 02-01\": {\n \"name\": {\n \"en\": \"Family Day\",\n \"fr\": \"F\u00EAte de la famille\"\n }\n },\n \"easter 1\": {\n \"_name\": \"easter 1\",\n \"type\": \"optional\"\n },\n \"monday after 08-01\": {\n \"name\": {\n \"en\": \"Heritage Day\",\n \"fr\": \"F\u00EAte du patrimoine\"\n },\n \"type\": \"optional\"\n }\n }\n },\n \"BC\": {\n \"name\": \"British Columbia\",\n \"zones\": [\n \"America/Vancouver\",\n \"America/Edmonton\",\n \"America/Creston\",\n \"America/Dawson_Creek\"\n ],\n \"days\": {\n \"2nd monday after 02-01\": {\n \"name\": {\n \"en\": \"Family Day\",\n \"fr\": \"F\u00EAte de la famille\"\n },\n \"active\": [\n {\n \"to\": 2019\n }\n ]\n },\n \"3rd monday after 02-01\": {\n \"name\": {\n \"en\": \"Family Day\",\n \"fr\": \"F\u00EAte de la famille\"\n },\n \"active\": [\n {\n \"from\": 2019\n }\n ]\n }\n }\n },\n \"MB\": {\n \"name\": \"Manitoba\",\n \"zones\": [\n \"America/Winnipeg\"\n ],\n \"days\": {\n \"3rd monday after 02-01\": {\n \"name\": {\n \"en\": \"Louis Riel Day\",\n \"fr\": \"Journ\u00E9e Louis Riel\"\n }\n }\n }\n },\n \"NB\": {\n \"name\": \"New Brunswick\",\n \"zones\": [\n \"America/Moncton\"\n ],\n \"days\": {\n \"monday after 08-01\": {\n \"name\": {\n \"en\": \"New Brunswick Day\",\n \"fr\": \"Jour de Nouveau Brunswick\"\n }\n }\n }\n },\n \"NL\": {\n \"name\": \"Newfoundland and Labrador\",\n \"zones\": [\n \"America/St_Johns\",\n \"America/Goose_Bay\"\n ],\n \"days\": {\n \"03-17\": {\n \"name\": {\n \"en\": \"Saint Patrick's Day\",\n \"fr\": \"Jour de la Saint-Patrick\"\n },\n \"type\": \"optional\"\n },\n \"04-23\": {\n \"name\": {\n \"en\": \"Saint George's Day\",\n \"fr\": \"Jour de St. George\"\n },\n \"type\": \"optional\"\n },\n \"06-24\": {\n \"name\": {\n \"en\": \"Discovery Day\",\n \"fr\": \"Journ\u00E9e d\u00E9couverte\"\n },\n \"type\": \"optional\"\n },\n \"07-12\": {\n \"name\": {\n \"en\": \"Orangemen's Day\",\n \"fr\": \"F\u00EAte des orangistes\"\n },\n \"type\": \"optional\"\n },\n \"11-11\": {\n \"name\": {\n \"en\": \"Armistice Day\",\n \"fr\": \"Jour de l'Armistice\"\n }\n }\n }\n },\n \"NS\": {\n \"name\": \"Nova Scotia\",\n \"zones\": [\n \"America/Halifax\",\n \"America/Moncton\"\n ],\n \"days\": {\n \"3rd monday after 02-01\": {\n \"name\": {\n \"en\": \"Heritage Day\",\n \"fr\": \"F\u00EAte du Patrimoine\"\n }\n },\n \"monday after 08-01\": {\n \"name\": {\n \"en\": \"Natal Day\",\n \"fr\": \"Jour de la Fondation\"\n }\n }\n }\n },\n \"NT\": {\n \"name\": \"Northwest Territories\",\n \"zones\": [\n \"America/Yellowknife\",\n \"America/Inuvik\"\n ],\n \"days\": {\n \"06-21\": {\n \"name\": {\n \"en\": \"National Aboriginal Day\",\n \"fr\": \"Journ\u00E9e nationale des Autochthones\"\n }\n }\n }\n },\n \"NU\": {\n \"name\": \"Nunavut\",\n \"zones\": [\n \"America/Iqaluit\",\n \"America/Pangnirtung\",\n \"America/Resolute\",\n \"America/Rankin_Inlet\",\n \"America/Atikokan\",\n \"America/Cambridge_Bay\"\n ],\n \"days\": {\n \"07-09\": {\n \"name\": {\n \"en\": \"Nunavut Day\"\n },\n \"type\": \"bank\"\n }\n }\n },\n \"ON\": {\n \"name\": \"Ontario\",\n \"zones\": [\n \"America/Toronto\",\n \"America/Nipigon\",\n \"America/Thunder_Bay\",\n \"America/Atikokan\",\n \"America/Rainy_River\",\n \"America/Winnipeg\"\n ],\n \"days\": {\n \"3rd monday after 02-01\": {\n \"name\": {\n \"en\": \"Family Day\",\n \"fr\": \"F\u00EAte de la famille\"\n }\n },\n \"easter 1\": {\n \"_name\": \"easter 1\"\n }\n }\n },\n \"PE\": {\n \"name\": \"Prince Edward Island\",\n \"days\": {\n \"3rd monday after 02-01\": {\n \"name\": {\n \"en\": \"Islander Day\",\n \"fr\": \"F\u00EAte des Insulaires\"\n }\n },\n \"easter 1\": {\n \"_name\": \"easter 1\",\n \"type\": \"optional\"\n },\n \"3rd friday after 08-01\": {\n \"name\": {\n \"en\": \"Gold Cup Parade Day\",\n \"fr\": \"D\u00E9fil\u00E9 de la Coupe d'or\"\n }\n }\n }\n },\n \"QC\": {\n \"name\": \"Quebec\",\n \"zones\": [\n \"America/Blanc-Sablon\",\n \"America/Toronto\",\n \"America/Nipigon\"\n ],\n \"days\": {\n \"easter -2\": {\n \"_name\": \"easter -2\",\n \"note\": \"Either Good Friday or Easter Monday, at the employer\u2019s option\"\n },\n \"easter 1\": {\n \"_name\": \"easter 1\",\n \"note\": \"Either Good Friday or Easter Monday, at the employer\u2019s option\"\n },\n \"monday before 05-25\": {\n \"name\": {\n \"en\": \"National Patriots' Day\",\n \"fr\": \"Journ\u00E9e nationale des patriotes\"\n }\n },\n \"06-24\": {\n \"name\": {\n \"en\": \"National Holiday\",\n \"fr\": \"F\u00EAte nationale du Qu\u00E9bec\"\n }\n },\n \"monday after 08-01\": false\n }\n },\n \"SK\": {\n \"name\": \"Saskatchewan\",\n \"zones\": [\n \"America/Regina\",\n \"America/Swift_Current\",\n \"America/Edmonton\"\n ],\n \"days\": {\n \"3rd monday after 02-01\": {\n \"name\": {\n \"en\": \"Family Day\",\n \"fr\": \"F\u00EAte de la famille\"\n }\n },\n \"3rd monday after 08-01\": {\n \"name\": {\n \"en\": \"Saskatchewan Day\"\n }\n }\n }\n },\n \"YT\": {\n \"name\": \"Yukon\",\n \"zones\": [\n \"America/Whitehorse\",\n \"America/Dawson\"\n ],\n \"days\": {\n \"easter 1\": {\n \"_name\": \"easter 1\"\n },\n \"3rd monday after 08-01\": {\n \"name\": {\n \"en\": \"Discovery Day\",\n \"fr\": \"Jour de la D\u00E9couverte\"\n }\n }\n }\n }\n }\n },\n \"CC\": {\n \"names\": {\n \"en\": \"Cocos (Keeling) Islands\"\n },\n \"langs\": [\n \"en\"\n ],\n \"zones\": [\n \"Indian/Cocos\"\n ],\n \"dayoff\": \"sunday\",\n \"days\": {\n \"chinese 01-0-01 and if sunday then next tuesday if saturday then next monday\": {\n \"name\": {\n \"en\": \"Chinese New Year\"\n },\n \"substitute\": true\n },\n \"chinese 01-0-02 and if sunday then next tuesday if saturday then next monday\": {\n \"name\": {\n \"en\": \"Chinese New Year (2nd Day)\"\n },\n \"substitute\": true\n },\n \"01-01\": {\n \"_name\": \"01-01\"\n },\n \"01-26\": {\n \"name\": {\n \"en\": \"Australia Day\"\n }\n },\n \"03-20\": {\n \"name\": {\n \"en\": \"Labour Day\"\n }\n },\n \"easter 1\": {\n \"_name\": \"easter 1\"\n },\n \"04-06\": {\n \"name\": {\n \"en\": \"Self Determination Day\"\n }\n },\n \"04-25\": {\n \"name\": {\n \"en\": \"Anzac Day\"\n }\n },\n \"12-25 and if sunday then next tuesday\": {\n \"_name\": \"12-25\",\n \"substitute\": true\n },\n \"12-26 and if sunday then next monday\": {\n \"_name\": \"12-26\",\n \"substitute\": true\n },\n \"1 Muharram and if sunday then next monday\": {\n \"substitute\": true,\n \"_name\": \"1 Muharram\"\n },\n \"1 Shawwal and if sunday then next monday\": {\n \"substitute\": true,\n \"_name\": \"1 Shawwal\",\n \"name\": {\n \"en\": \"Hari Raya Puasa\"\n }\n },\n \"10 Dhu al-Hijjah and if sunday then next monday\": {\n \"substitute\": true,\n \"_name\": \"10 Dhu al-Hijjah\",\n \"name\": {\n \"en\": \"Hari Raya Haji\"\n }\n },\n \"12 Rabi al-awwal and if sunday then next monday\": {\n \"substitute\": true,\n \"_name\": \"12 Rabi al-awwal\",\n \"name\": {\n \"en\": \"Hari Maulaud Nabi\"\n }\n }\n }\n },\n \"CD\": {\n \"names\": {\n \"fr\": \"R\u00E9publique d\u00E9mocratique du Congo\",\n \"en\": \"Democratic Republic of the Congo\"\n },\n \"dayoff\": \"sunday\",\n \"langs\": [\n \"fr\"\n ],\n \"zones\": [\n \"Africa/Maputo\",\n \"Africa/Lagos\"\n ],\n \"days\": {\n \"01-01 and if sunday then next monday\": {\n \"substitute\": true,\n \"_name\": \"01-01\"\n },\n \"01-04 and if sunday then next monday\": {\n \"substitute\": true,\n \"name\": {\n \"fr\": \"Martyrs de l'Ind\u00E9pendance\",\n \"en\": \"Day of the Martyrs\"\n }\n },\n \"01-16 and if sunday then next tuesday\": {\n \"substitute\": true,\n \"name\": {\n \"fr\": \"Journ\u00E9e du H\u00E9ro National Laurent D\u00E9sir\u00E9 Kabila\",\n \"en\": \"Anniversary of President Laurent Kabila\"\n }\n },\n \"01-17 and if sunday then next monday\": {\n \"substitute\": true,\n \"name\": {\n \"fr\": \"Journ\u00E9e du H\u00E9ro National Patrice Emery Lumumba\",\n \"en\": \"Anniversary of Prime Minister Patrice Emery Lumumba\"\n }\n },\n \"05-01 and if sunday then next monday\": {\n \"substitute\": true,\n \"_name\": \"05-01\"\n },\n \"05-17 and if sunday then next monday\": {\n \"substitute\": true,\n \"name\": {\n \"fr\": \"Journ\u00E9e de la R\u00E9volution et des Forces Arm\u00E9es\",\n \"en\": \"Liberation Day\"\n }\n },\n \"06-30 and if sunday then next monday\": {\n \"substitute\": true,\n \"_name\": \"Independence Day\",\n \"name\": {\n \"fr\": \"Anniversaire de Ind\u00E9pendance\"\n }\n },\n \"08-01 and if sunday then next monday\": {\n \"substitute\": true,\n \"name\": {\n \"fr\": \"F\u00EAte des parents\",\n \"en\": \"Parents' Day\"\n }\n },\n \"12-25 and if sunday then next monday\": {\n \"substitute\": true,\n \"_name\": \"12-25\"\n },\n \"2016-01-15\": {\n \"_name\": \"Public Holiday\"\n }\n }\n },\n \"CF\": {\n \"names\": {\n \"fr\": \"R\u00E9publique centrafricaine\",\n \"sg\": \"K\u00F6d\u00F6r\u00F6s\u00EAse t\u00EE B\u00EAafr\u00EEka\",\n \"en\": \"Central African Republic\"\n },\n \"dayoff\": \"sunday\",\n \"langs\": [\n \"fr\",\n \"sg\"\n ],\n \"zones\": [\n \"Africa/Lagos\"\n ],\n \"days\": {\n \"01-01\": {\n \"_name\": \"01-01\"\n },\n \"03-29\": {\n \"name\": {\n \"fr\": \"D\u00E9c\u00E8s du Fondateur Barth\u00E9l\u00E9my Boganda\",\n \"en\": \"Boganda Day\"\n }\n },\n \"easter 1\": {\n \"_name\": \"easter 1\"\n },\n \"05-01\": {\n \"_name\": \"05-01\"\n },\n \"easter 39\": {\n \"_name\": \"easter 39\"\n },\n \"easter 50\": {\n \"_name\": \"easter 50\"\n },\n \"06-30\": {\n \"name\": {\n \"fr\": \"Journ\u00E9e de pri\u00E8re\",\n \"en\": \"General Prayer Day\"\n }\n },\n \"08-13\": {\n \"_name\": \"Independence Day\"\n },\n \"08-15\": {\n \"_name\": \"08-15\"\n },\n \"11-01\": {\n \"_name\": \"11-01\"\n },\n \"12-01\": {\n \"name\": {\n \"fr\": \"Jour de la R\u00E9publique\",\n \"en\": \"Republic Day\"\n }\n },\n \"12-25\": {\n \"_name\": \"12-25\"\n },\n \"1 Shawwal\": {\n \"_name\": \"1 Shawwal\"\n },\n \"10 Dhu al-Hijjah\": {\n \"_name\": \"10 Dhu al-Hijjah\"\n }\n }\n },\n \"CG\": {\n \"names\": {\n \"fr\": \"R\u00E9publique du Congo\",\n \"en\": \"Republic of the Congo\"\n },\n \"dayoff\": \"sunday\",\n \"langs\": [\n \"fr\",\n \"en\"\n ],\n \"zones\": [\n \"Africa/Lagos\"\n ],\n \"days\": {\n \"01-01\": {\n \"_name\": \"01-01\"\n },\n \"easter 1\": {\n \"_name\": \"easter 1\"\n },\n \"05-01\": {\n \"_name\": \"05-01\"\n },\n \"easter 39\": {\n \"_name\": \"easter 39\"\n },\n \"easter 49\": {\n \"_name\": \"easter 49\"\n },\n \"easter 50\": {\n \"_name\": \"easter 50\"\n },\n \"06-10\": {\n \"name\": {\n \"fr\": \"F\u00EAte de la comm\u00E9moration de la conf\u00E9rence nationale souveraine\"\n }\n },\n \"08-15\": {\n \"_name\": \"08-15\"\n },\n \"11-01\": {\n \"_name\": \"11-01\"\n },\n \"11-28\": {\n \"name\": {\n \"fr\": \"Journ\u00E9e nationale de la R\u00E9publique\"\n }\n },\n \"12-25\": {\n \"_name\": \"12-25\"\n }\n }\n },\n \"CH\": {\n \"names\": {\n \"de\": \"Schweiz\",\n \"fr\": \"Suisse\",\n \"it\": \"Svizzera\",\n \"en\": \"Switzerland\"\n },\n \"dayoff\": \"sunday\",\n \"langs\": [\n \"de-ch\",\n \"de\",\n \"fr\",\n \"it\"\n ],\n \"zones\": [\n \"Europe/Zurich\"\n ],\n \"days\": {\n \"01-01\": {\n \"_name\": \"01-01\"\n },\n \"easter -3\": {\n \"_name\": \"easter -3\",\n \"type\": \"observance\"\n },\n \"easter -2\": {\n \"_name\": \"easter -2\"\n },\n \"easter\": {\n \"_name\": \"easter\"\n },\n \"easter 1\": {\n \"_name\": \"easter 1\"\n },\n \"easter 39\": {\n \"_name\": \"easter 39\",\n \"name\": {\n \"de\": \"Auffahrt\"\n }\n },\n \"easter 49\": {\n \"_name\": \"easter 49\"\n },\n \"easter 50\": {\n \"_name\": \"easter 50\"\n },\n \"2nd sunday in May\": {\n \"_name\": \"Mothers Day\",\n \"type\": \"observance\"\n },\n \"1st sunday in June\": {\n \"name\": {\n \"de\": \"V\u00E4tertag\",\n \"fr\": \"F\u00EAte des p\u00E8res\"\n },\n \"type\": \"observance\",\n \"active\": [\n {\n \"from\": \"2009-01-01\"\n }\n ]\n },\n \"08-01\": {\n \"name\": {\n \"de\": \"Bundesfeiertag\",\n \"fr\": \"F\u00EAte nationale\",\n \"it\": \"Giorno festivo federale\"\n }\n },\n \"3rd sunday after 09-01\": {\n \"name\": {\n \"de\": \"Eidg. Dank-, Buss- und Bettag\",\n \"fr\": \"Je\u00FBne f\u00E9d\u00E9ral\",\n \"it\": \"Digiuno federale\",\n \"en\": \"Federal Day of Thanksgiving, Repentance and Prayer\"\n }\n },\n \"12-25\": {\n \"_name\": \"12-25\",\n \"name\": {\n \"de\": \"Weihnachtstag\"\n }\n },\n \"12-26\": {\n \"_name\": \"12-26\",\n \"name\": {\n \"de\": \"Stephanstag\",\n \"fr\": \"Saint-Etienne\"\n }\n }\n },\n \"states\": {\n \"ZH\": {\n \"names\": {\n \"de\": \"Kanton Z\u00FCrich\",\n \"fr\": \"Canton de Zurich\",\n \"it\": \"Canton Zurigo\",\n \"en\": \"Canton of Z\u00FCrich\"\n },\n \"days\": {\n \"01-02\": {\n \"name\": {\n \"de\": \"Berchtoldstag\",\n \"fr\": \"Saint-Berthold\"\n },\n \"type\": \"optional\"\n },\n \"05-01\": {\n \"_name\": \"05-01\"\n },\n \"easter 50\": {\n \"_name\": \"easter 50\"\n },\n \"monday after 2nd saturday in September 13:00\": {\n \"name\": {\n \"de\": \"Knabenschiessen\"\n },\n \"type\": \"optional\"\n }\n }\n },\n \"BE\": {\n \"names\": {\n \"de\": \"Kanton Bern\",\n \"fr\": \"Canton de Berne\",\n \"it\": \"Canton Berna\",\n \"en\": \"Canton of Bern\"\n },\n \"days\": {\n \"01-02\": {\n \"name\": {\n \"de\": \"Berchtoldstag\",\n \"fr\": \"2 janvier\"\n }\n }\n }\n },\n \"LU\": {\n \"names\": {\n \"de\": \"Kanton Luzern\",\n \"fr\": \"Canton de Lucerne\",\n \"it\": \"Canton Lucerna\",\n \"en\": \"Canton of Lucerne\"\n },\n \"days\": {\n \"01-02\": {\n \"name\": {\n \"de\": \"Berchtoldstag\",\n \"fr\": \"Saint-Berthold\"\n },\n \"type\": \"optional\"\n },\n \"03-19\": {\n \"_name\": \"03-19\",\n \"type\": \"observance\"\n },\n \"easter 1\": {\n \"_name\": \"easter 1\",\n \"type\": \"optional\"\n },\n \"easter 50\": {\n \"_name\": \"easter 50\",\n \"type\": \"optional\"\n },\n \"easter 60\": {\n \"_name\": \"easter 60\"\n },\n \"08-15\": {\n \"_name\": \"08-15\"\n },\n \"11-01\": {\n \"_name\": \"11-01\"\n },\n \"12-08\": {\n \"_name\": \"12-08\"\n }\n }\n },\n \"UR\": {\n \"names\": {\n \"de\": \"Kanton Uri\",\n \"fr\": \"Canton d'Uri\",\n \"it\": \"Canton Uri\",\n \"en\": \"Canton of Uri\"\n },\n \"days\": {\n \"01-06\": {\n \"_name\": \"01-06\"\n },\n \"03-19\": {\n \"_name\": \"03-19\"\n },\n \"easter 60\": {\n \"_name\": \"easter 60\"\n },\n \"08-15\": {\n \"_name\": \"08-15\"\n },\n \"11-01\": {\n \"_name\": \"11-01\"\n },\n \"12-08\": {\n \"_name\": \"12-08\"\n },\n \"12-26\": false,\n \"12-26 not on monday, friday\": {\n \"_name\": \"12-26\"\n }\n }\n },\n \"SZ\": {\n \"names\": {\n \"de\": \"Kanton Schwyz\",\n \"fr\": \"Canton de Schwytz\",\n \"it\": \"Canton Svitto\",\n \"en\": \"Canton of Schwyz\"\n },\n \"days\": {\n \"01-06\": {\n \"_name\": \"01-06\"\n },\n \"03-19\": {\n \"_name\": \"03-19\"\n },\n \"easter 60\": {\n \"_name\": \"easter 60\"\n },\n \"08-15\": {\n \"_name\": \"08-15\"\n },\n \"11-01\": {\n \"_name\": \"11-01\"\n },\n \"12-08\": {\n \"_name\": \"12-08\"\n }\n }\n },\n \"OW\": {\n \"names\": {\n \"de\": \"Kanton Obwalden\",\n \"fr\": \"Canton d'Obwald\",\n \"it\": \"Canton Obvaldo\",\n \"en\": \"Canton of Obwalden\"\n },\n \"days\": {\n \"01-02\": {\n \"name\": {\n \"de\": \"Berchtoldstag\",\n \"fr\": \"Saint-Berthold\"\n },\n \"type\": \"optional\"\n },\n \"easter 1\": {\n \"_name\": \"easter 1\",\n \"type\": \"optional\"\n },\n \"easter 50\": {\n \"_name\": \"easter 50\",\n \"type\": \"optional\"\n },\n \"easter 60\": {\n \"_name\": \"easter 60\"\n },\n \"08-15\": {\n \"_name\": \"08-15\"\n },\n \"09-25\": {\n \"name\": {\n \"de\": \"Bruderklausenfest\",\n \"fr\": \"Saint-Nicholas-de-Fl\u00FCe\",\n \"en\": \"Saint Nicholas of Fl\u00FCe\"\n }\n },\n \"11-01\": {\n \"_name\": \"11-01\"\n },\n \"12-08\": {\n \"_name\": \"12-08\"\n },\n \"12-26\": {\n \"_name\": \"12-26\",\n \"type\": \"optional\"\n }\n }\n },\n \"NW\": {\n \"names\": {\n \"de\": \"Kanton Nidwalden\",\n \"fr\": \"Canton de Nidwald\",\n \"it\": \"Canton Nidvaldo\",\n \"en\": \"Canton of Nidwalden\"\n },\n \"days\": {\n \"01-02\": {\n \"name\": {\n \"de\": \"Berchtoldstag\",\n \"fr\": \"Saint-Berthold\"\n },\n \"type\": \"bank\"\n },\n \"03-19\": {\n \"_name\": \"03-19\"\n },\n \"easter 1\": {\n \"_name\": \"easter 1\",\n \"type\": \"optional\"\n },\n \"easter 50\": {\n \"_name\": \"easter 50\",\n \"type\": \"optional\"\n },\n \"easter 60\": {\n \"_name\": \"easter 60\"\n },\n \"08-15\": {\n \"_name\": \"08-15\"\n },\n \"11-01\": {\n \"_name\": \"11-01\"\n },\n \"12-08\": {\n \"_name\": \"12-08\"\n },\n \"12-26\": {\n \"_name\": \"12-26\",\n \"type\": \"optional\"\n }\n }\n },\n \"GL\": {\n \"sources\": [\n \"https://www.gl.ch/verwaltung/staatskanzlei/oeffentliche-feiertage.html/1335\"\n ],\n \"names\": {\n \"de\": \"Kanton Glarus\",\n \"fr\": \"Canton de Glaris\",\n \"it\": \"Canton Glarona\",\n \"en\": \"Canton of Glarus\"\n },\n \"days\": {\n \"01-02\": {\n \"name\": {\n \"de\": \"Berchtoldstag\",\n \"fr\": \"Saint-Berthold\"\n },\n \"type\": \"optional\"\n },\n \"Thursday after 04-02 if is observance holiday then next Thursday\": {\n \"name\": {\n \"de\": \"N\u00E4felser Fahrt\",\n \"fr\": \"Bataille de N\u00E4fels\"\n }\n },\n \"3rd sunday after 09-01\": false,\n \"11-01\": {\n \"_name\": \"11-01\"\n },\n \"12-24\": {\n \"_name\": \"12-24\"\n },\n \"12-31\": {\n \"_name\": \"12-31\"\n }\n }\n },\n \"ZG\": {\n \"names\": {\n \"de\": \"Kanton Zug\",\n \"fr\": \"Canton de Zoug\",\n \"it\": \"Canton Zugo\",\n \"en\": \"Canton of Zug\"\n },\n \"days\": {\n \"01-02\": {\n \"name\": {\n \"de\": \"Berchtoldstag\",\n \"fr\": \"Saint-Berthold\"\n },\n \"type\": \"optional\"\n },\n \"easter 1\": {\n \"_name\": \"easter 1\",\n \"type\": \"optional\"\n },\n \"easter 50\": {\n \"_name\": \"easter 50\",\n \"type\": \"optional\"\n },\n \"easter 60\": {\n \"_name\": \"easter 60\"\n },\n \"08-15\": {\n \"_name\": \"08-15\"\n },\n \"11-01\": {\n \"_name\": \"11-01\"\n },\n \"12-08\": {\n \"_name\": \"12-08\"\n },\n \"12-26\": {\n \"_name\": \"12-26\",\n \"type\": \"optional\"\n }\n }\n },\n \"FR\": {\n \"names\": {\n \"fr\": \"Canton de Fribourg\",\n \"de\": \"Kanton Freiburg\",\n \"it\": \"Canton Friburgo\",\n \"en\": \"Canton of Fribourg\"\n },\n \"langs\": [\n \"fr\",\n \"de-ch\",\n \"de\",\n \"it\"\n ],\n \"days\": {\n \"01-02\": {\n \"name\": {\n \"de\": \"Berchtoldstag\",\n \"fr\": \"Saint-Berthold\"\n },\n \"type\": \"optional\"\n },\n \"easter 1\": {\n \"_name\": \"easter 1\",\n \"type\": \"optional\"\n },\n \"easter 50\": {\n \"_name\": \"easter 50\",\n \"type\": \"optional\"\n },\n \"easter 60\": {\n \"_name\": \"easter 60\",\n \"note\": \"excluding communities: Agriswil, Altavilla, B\u00FCchslen, Cordast, Courgevaux, Courlevon, Fr\u00E4schels, Galmiz, Gempenach, Greng, Jeuss, Kerzers, Lurtigen, Meyriez, Muntelier, Murten, Ried bei Kerzers (halb), Salvenach, Ulmiz, Bas-Vully, Haut-Vully\\n\"\n },\n \"08-15\": {\n \"_name\": \"08-15\",\n \"note\": \"excluding communities: Agriswil, Altavilla, B\u00FCchslen, Cordast, Courgevaux, Courlevon, Fr\u00E4schels, Galmiz, Gempenach, Greng, Jeuss, Kerzers, Lurtigen, Meyriez, Muntelier, Murten, Ried bei Kerzers (halb), Salvenach, Ulmiz, Bas-Vully, Haut-Vully\\n\"\n },\n \"11-01\": {\n \"_name\": \"11-01\",\n \"note\": \"excluding communities: Agriswil, Altavilla, B\u00FCchslen, Cordast, Courgevaux, Courlevon, Fr\u00E4schels, Galmiz, Gempenach, Greng, Jeuss, Kerzers, Lurtigen, Meyriez, Muntelier, Murten, Ried bei Kerzers (halb), Salvenach, Ulmiz, Bas-Vully, Haut-Vully\\n\"\n },\n \"12-08\": {\n \"_name\": \"12-08\",\n \"note\": \"excluding communities: Agriswil, Altavilla, B\u00FCchslen, Cordast, Courgevaux, Courlevon, Fr\u00E4schels, Galmiz, Gempenach, Greng, Jeuss, Kerzers, Lurtigen, Meyriez, Muntelier, Murten, Ried bei Kerzers (halb), Salvenach, Ulmiz, Bas-Vully, Haut-Vully\\n\"\n },\n \"12-26\": {\n \"_name\": \"12-26\",\n \"type\": \"optional\"\n }\n }\n },\n \"SO\": {\n \"names\": {\n \"de\": \"Kanton Solothurn\",\n \"fr\": \"Canton de Soleure\",\n \"it\": \"Canton Soletta\",\n \"en\": \"Canton of Solothurn\"\n },\n \"days\": {\n \"01-02\": {\n \"name\": {\n \"de\": \"Berchtoldstag\",\n \"fr\": \"Saint-Berthold\"\n },\n \"type\": \"optional\"\n },\n \"03-19\": {\n \"_name\": \"03-19\",\n \"note\": \"Only in communities: Fulenbach, Walterswil, Wisen, Metzerlen, Nulgar-St. Pantaleon, Rodersdorf, B\u00E4rschwil, B\u00FCsserach\\n\"\n },\n \"easter 1\": {\n \"_name\": \"easter 1\",\n \"type\": \"optional\"\n },\n \"05-01 12:00\": {\n \"_name\": \"05-01\"\n },\n \"easter 50\": {\n \"_name\": \"easter 50\",\n \"type\": \"optional\"\n },\n \"easter 60\": {\n \"_name\": \"easter 60\",\n \"note\": \"is optional in Bucheggberg\"\n },\n \"08-15\": {\n \"_name\": \"08-15\",\n \"note\": \"is optional in Bucheggberg\"\n },\n \"11-01\": {\n \"_name\": \"11-01\",\n \"note\": \"is optional in Bucheggberg\"\n },\n \"12-26\": {\n \"_name\": \"12-26\",\n \"type\": \"optional\"\n }\n }\n },\n \"BS\": {\n \"names\": {\n \"de\": \"Kanton Basel-Stadt\",\n \"fr\": \"Canton de B\u00E2le-Ville\",\n \"it\": \"Canton Basilea Citt\u00E0\",\n \"en\": \"Canton of Basel-City\"\n },\n \"days\": {\n \"05-01\": {\n \"_name\": \"05-01\"\n }\n }\n },\n \"BL\": {\n \"names\": {\n \"de\": \"Kanton Basel-Landschaft\",\n \"fr\": \"Canton de B\u00E2le-Campagne\",\n \"it\": \"Canton Basilea Campagna\",\n \"en\": \"Canton of Basel-Country\"\n },\n \"days\": {\n \"05-01\": {\n \"_name\": \"05-01\"\n },\n \"easter 60\": {\n \"_name\": \"easter 60\",\n \"type\": \"observance\"\n }\n }\n },\n \"SH\": {\n \"names\": {\n \"de\": \"Kanton Schaffhausen\",\n \"fr\": \"Canton de Schaffhouse\",\n \"it\": \"Canton Sciaffusa\",\n \"en\": \"Canton of Schaffhausen\"\n },\n \"days\": {\n \"01-02\": {\n \"name\": {\n \"de\": \"Berchtoldstag\",\n \"fr\": \"Saint-Berthold\"\n },\n \"type\": \"optional\"\n },\n \"05-01\": {\n \"_name\": \"05-01\"\n }\n }\n },\n \"AR\": {\n \"names\": {\n \"de\": \"Kanton Appenzell Ausserrhoden\",\n \"fr\": \"Canton d'Appenzell Rhodes-Ext\u00E9rieures\",\n \"it\": \"Canton Appenzello Esterno\",\n \"en\": \"Canton of Appenzell Outer Rhodes\"\n },\n \"days\": {\n \"12-26\": false,\n \"12-26 not on monday\": {\n \"_name\": \"12-26\"\n }\n }\n },\n \"AI\": {\n \"names\": {\n \"de\": \"Kanton Appenzell Innerrhoden\",\n \"fr\": \"Canton d'Appenzell Rhodes-Int\u00E9rieures\",\n \"it\": \"Canton Appenzello Interno\",\n \"en\": \"Canton of Appenzell Inner-Rhodes\"\n },\n \"days\": {\n \"easter 60\": {\n \"_name\": \"easter 60\"\n },\n \"08-15\": {\n \"_name\": \"08-15\"\n },\n \"09-22\": {\n \"name\": {\n \"de\": \"Mauritiustag\"\n },\n \"note\": \"excluding: Bezirk Oberegg\\n\"\n },\n \"11-01\": {\n \"_name\": \"11-01\"\n },\n \"12-26\": {\n \"type\": \"observance\"\n },\n \"12-26 not on tuesday, saturday\": {\n \"_name\": \"12-26\"\n }\n }\n },\n \"SG\": {\n \"names\": {\n \"de\": \"Kanton St. Gallen\",\n \"fr\": \"Canton de Saint-Gall\",\n \"it\": \"Canton San Gallo\",\n \"en\": \"Canton of St. Gallen\"\n },\n \"days\": {\n \"11-01\": {\n \"_name\": \"11-01\"\n }\n }\n },\n \"GR\": {\n \"names\": {\n \"de\": \"Kanton Graub\u00FCnden\",\n \"it\": \"Cantone dei Grigioni\",\n \"fr\": \"Canton des Grisons\",\n \"en\": \"Canton of Grisons\"\n },\n \"langs\": [\n \"de-ch\",\n \"de\",\n \"it\",\n \"fr\"\n ],\n \"days\": {\n \"01-06\": {\n \"_name\": \"01-06\",\n \"type\": \"observance\"\n },\n \"03-19\": {\n \"_name\": \"03-19\",\n \"type\": \"observance\"\n },\n \"easter -2\": {\n \"_name\": \"easter -2\",\n \"type\": \"optional\"\n },\n \"easter 60\": {\n \"_name\": \"easter 60\",\n \"type\": \"observance\"\n },\n \"08-15\": {\n \"_name\": \"08-15\",\n \"type\": \"observance\"\n },\n \"11-01\": {\n \"_name\": \"11-01\",\n \"type\": \"observance\"\n },\n \"12-08\": {\n \"_name\": \"12-08\",\n \"type\": \"observance\"\n }\n }\n },\n \"AG\": {\n \"names\": {\n \"de\": \"Kanton Aargau\",\n \"fr\": \"Canton d'Argovie\",\n \"it\": \"Canton Argovia\",\n \"en\": \"Canton of Aargau\"\n },\n \"days\": {\n \"01-02\": {\n \"name\": {\n \"de\": \"Berchtoldstag\",\n \"fr\": \"Saint-Berthold\"\n }\n },\n \"05-01\": {\n \"_name\": \"05-01\"\n },\n \"easter 60\": {\n \"_name\": \"easter 60\"\n },\n \"08-15\": {\n \"_name\": \"08-15\"\n },\n \"11-01\": {\n \"_name\": \"11-01\"\n },\n \"12-08\": {\n \"_name\": \"12-08\"\n }\n }\n },\n \"TG\": {\n \"names\": {\n \"de\": \"Kanton Thurgau\",\n \"fr\": \"Canton de Thurgovie\",\n \"it\": \"Canton Turgovia\",\n \"en\": \"Canton of Thurgau\"\n },\n \"days\": {\n \"01-02\": {\n \"name\": {\n \"de\": \"Berchtoldstag\",\n \"fr\": \"Saint-Berthold\"\n }\n },\n \"05-01\": {\n \"_name\": \"05-01\"\n }\n }\n },\n \"TI\": {\n \"names\": {\n \"it\": \"Canton Ticino\",\n \"de\": \"Kanton Tessin\",\n \"fr\": \"Canton du Tessin\",\n \"en\": \"Canton of Ticino\"\n },\n \"langs\": [\n \"it\",\n \"de-ch\",\n \"de\",\n \"fr\"\n ],\n \"days\": {\n \"01-02\": {\n \"name\": {\n \"de\": \"Berchtoldstag\",\n \"fr\": \"Saint-Berthold\"\n },\n \"type\": \"bank\"\n },\n \"01-06\": {\n \"_name\": \"01-06\",\n \"name\": {\n \"it\": \"Epifania\"\n }\n },\n \"03-19\": {\n \"_name\": \"03-19\"\n },\n \"easter -2\": false,\n \"easter 60\": {\n \"_name\": \"easter 60\"\n },\n \"05-01\": {\n \"_name\": \"05-01\"\n },\n \"06-29\": {\n \"_name\": \"06-29\"\n },\n \"1st sunday in June\": false,\n \"08-15\": {\n \"_name\": \"08-15\",\n \"name\": {\n \"it\": \"Assunzione\"\n }\n },\n \"11-01\": {\n \"_name\": \"11-01\"\n },\n \"12-08\": {\n \"_name\": \"12-08\"\n }\n }\n },\n \"VD\": {\n \"names\": {\n \"fr\": \"Canton de Vaud\",\n \"de\": \"Kanton Waadt\",\n \"it\": \"Canton Vaud\",\n \"en\": \"Canton of Vaud\"\n },\n \"langs\": [\n \"fr\",\n \"de-ch\",\n \"de\",\n \"it\"\n ],\n \"days\": {\n \"01-02\": {\n \"name\": {\n \"de\": \"Berchtoldstag\",\n \"fr\": \"2 Janvier\"\n }\n },\n \"monday after 3rd sunday in September\": {\n \"name\": {\n \"de\": \"Bettagsmontag\",\n \"fr\": \"Lundi du Je\u00FBne F\u00E9d\u00E9ral\",\n \"en\": \"Monday after Federal Day of Thanksgiving, Repentance and Prayer\"\n }\n },\n \"12-26\": false\n }\n },\n \"VS\": {\n \"names\": {\n \"fr\": \"Canton du Valais\",\n \"de\": \"Kanton Wallis\",\n \"it\": \"Canton Vallese\",\n \"en\": \"Canton of Valais\"\n },\n \"langs\": [\n \"fr\",\n \"de-ch\",\n \"de\",\n \"it\"\n ],\n \"days\": {\n \"01-02\": {\n \"name\": {\n \"de\": \"Berchtoldstag\",\n \"fr\": \"Saint-Berthold\"\n },\n \"type\": \"bank\"\n },\n \"03-19\": {\n \"_name\": \"03-19\"\n },\n \"easter -2\": false,\n \"easter 1\": {\n \"_name\": \"easter 1\",\n \"type\": \"optional\"\n },\n \"05-01 12:00\": {\n \"_name\": \"05-01\"\n },\n \"easter 50\": {\n \"_name\": \"easter 50\"\n },\n \"easter 60\": {\n \"_name\": \"easter 60\"\n },\n \"08-15\": {\n \"_name\": \"08-15\"\n },\n \"monday after 3rd sunday after 09-01\": {\n \"name\": {\n \"de\": \"Bettagsmontag\",\n \"fr\": \"Lundi du Je\u00FBne F\u00E9d\u00E9ral\",\n \"en\": \"Monday after Federal Day of Thanksgiving, Repentance and Prayer\"\n },\n \"type\": \"bank\"\n },\n \"11-01\": {\n \"_name\": \"11-01\"\n },\n \"12-08\": {\n \"_name\": \"12-08\"\n },\n \"12-24 12:00\": {\n \"_name\": \"12-24\"\n },\n \"12-26\": {\n \"type\": \"optional\"\n }\n }\n },\n \"NE\": {\n \"names\": {\n \"fr\": \"Canton de Neuch\u00E2tel\",\n \"de\": \"Kanton Neuenburg\",\n \"it\": \"Canton Neuch\u00E2tel\",\n \"en\": \"Canton of Neuch\u00E2tel\"\n },\n \"langs\": [\n \"fr\",\n \"de-ch\",\n \"de\",\n \"it\"\n ],\n \"days\": {\n \"01-02 on monday\": {\n \"name\": {\n \"de\": \"Berchtoldstag\",\n \"fr\": \"2 Janvier\"\n }\n },\n \"01-02\": {\n \"name\": {\n \"de\": \"Berchtoldstag\",\n \"fr\": \"2 Janvier\"\n },\n \"type\": \"observance\"\n },\n \"03-01\": {\n \"name\": {\n \"fr\": \"Instauration de la R\u00E9publique\",\n \"de\": \"Jahrestag Ausrufung der Republik\"\n }\n },\n \"easter -2\": {\n \"_name\": \"easter -2\"\n },\n \"05-01\": {\n \"_name\": \"05-01\"\n },\n \"easter 50\": {\n \"_name\": \"easter 50\",\n \"type\": \"observance\"\n },\n \"easter 60\": {\n \"_name\": \"easter 60\"\n },\n \"monday after 3rd sunday in September\": {\n \"name\": {\n \"de\": \"Bettagsmontag\",\n \"fr\": \"Lundi du Je\u00FBne F\u00E9d\u00E9ral\",\n \"en\": \"Monday after Federal Day of Thanksgiving, Repentance and Prayer\"\n },\n \"type\": \"optional\"\n },\n \"12-26\": {\n \"type\": \"observance\"\n },\n \"12-26 on monday\": {\n \"_name\": \"12-26\"\n }\n }\n },\n \"GE\": {\n \"names\": {\n \"fr\": \"Canton de Gen\u00E8ve\",\n \"de\": \"Kanton Genf\",\n \"it\": \"Canton Ginevra\",\n \"en\": \"Canton of Geneva\"\n },\n \"langs\": [\n \"fr\",\n \"de-ch\",\n \"de\",\n \"it\"\n ],\n \"days\": {\n \"01-02\": {\n \"name\": {\n \"de\": \"Berchtoldstag\",\n \"fr\": \"2 Janvier\"\n },\n \"type\": \"bank\"\n },\n \"thursday after 1st sunday after 09-01\": {\n \"name\": {\n \"de\": \"Genfer Bettag\",\n \"fr\": \"Je\u00FBne Genevois\"\n }\n },\n \"12-26\": {\n \"type\": \"bank\"\n },\n \"12-31\": {\n \"name\": {\n \"de\": \"Wiederherstellung der Republik\",\n \"fr\": \"Restauration de la R\u00E9publique\",\n \"en\": \"Restoration of the Republic\"\n }\n },\n \"3rd sunday after 09-01\": false\n }\n },\n \"JU\": {\n \"names\": {\n \"fr\": \"Canton du Jura\",\n \"de\": \"Kanton Jura\",\n \"it\": \"Canton Giura\",\n \"en\": \"Canton of Jura\"\n },\n \"langs\": [\n \"fr\",\n \"de-ch\",\n \"de\",\n \"it\"\n ],\n \"days\": {\n \"01-02\": {\n \"name\": {\n \"de\": \"Berchtoldstag\",\n \"fr\": \"2 Janvier\"\n }\n },\n \"05-01\": {\n \"_name\": \"05-01\"\n },\n \"easter 60\": {\n \"_name\": \"easter 60\"\n },\n \"06-23\": {\n \"name\": {\n \"fr\": \"Pl\u00E9biscite jurassien\",\n \"en\": \"Jura Plebiscite\",\n \"de\": \"Fest der Unabh\u00E4ngigkeit\"\n }\n },\n \"08-15\": {\n \"_name\": \"08-15\"\n },\n \"11-01\": {\n \"_name\": \"11-01\"\n },\n \"12-26\": false\n }\n }\n }\n },\n \"CI\": {\n \"names\": {\n \"fr\": \"R\u00E9publique de C\u00F4te d'Ivoire\",\n \"en\": \"Republic of C\u00F4te d'Ivoire\"\n },\n \"langs\": [\n \"fr\",\n \"en\"\n ],\n \"zones\": [\n \"Africa/Abidjan\"\n ],\n \"dayoff\": \"sunday\",\n \"days\": {\n \"01-01\": {\n \"_name\": \"01-01\"\n },\n \"easter 1\": {\n \"_name\": \"easter 1\"\n },\n \"05-01\": {\n \"_name\": \"05-01\"\n },\n \"easter 39\": {\n \"_name\": \"easter 39\"\n },\n \"easter 50\": {\n \"_name\": \"easter 50\"\n },\n \"08-07 since 1960\": {\n \"_name\": \"Independence Day\"\n },\n \"08-15\": {\n \"_name\": \"08-15\"\n },\n \"11-01\": {\n \"_name\": \"11-01\"\n },\n \"11-15 since 1996\": {\n \"name\": {\n \"en\": \"National Peace Day\"\n }\n },\n \"12-25\": {\n \"_name\": \"12-25\"\n },\n \"12 Rabi al-awwal\": {\n \"_name\": \"12 Rabi al-awwal\"\n },\n \"27 Ramadan\": {\n \"_name\": \"27 Ramadan\"\n },\n \"1 Shawwal\": {\n \"_name\": \"1 Shawwal\"\n },\n \"10 Dhu al-Hijjah\": {\n \"_name\": \"10 Dhu al-Hijjah\"\n }\n }\n },\n \"CK\": {\n \"names\": {\n \"rar\": \"K\u016Bki '\u0100irani\",\n \"en\": \"Cook Islands\"\n },\n \"langs\": [\n \"en\",\n \"rar\"\n ],\n \"zones\": [\n \"Pacific/Rarotonga\"\n ],\n \"dayoff\": \"sunday\",\n \"days\": {\n \"01-01 and if Saturday, Sunday then next Monday\": {\n \"substitute\": true,\n \"_name\": \"01-01\"\n },\n \"01-02 and if Saturday then next Monday if Monday, Sunday then next Tuesday\": {\n \"substitute\": true,\n \"name\": {\n \"en\": \"Day after New Year's Day\"\n }\n },\n \"04-25\": {\n \"name\": {\n \"en\": \"Anzac Day\"\n }\n },\n \"easter -2\": {\n \"_name\": \"easter -2\"\n },\n \"easter 1\": {\n \"_name\": \"easter 1\"\n },\n \"1st Monday in June\": {\n \"name\": {\n \"en\": \"Queen's Birthday\"\n }\n },\n \"1st Friday in July\": {\n \"name\": {\n \"en\": \"Ra o te Ui Ariki (House of Ariki)\",\n \"rar\": \"Ra o te Ui Ariki\"\n }\n },\n \"08-04 and if Saturday, Sunday then next Monday\": {\n \"substitute\": true,\n \"_name\": \"Constitution Day\"\n },\n \"10-26 and if Saturday, Sunday then next Monday\": {\n \"substitute\": true,\n \"name\": {\n \"en\": \"National Gospel Day\"\n }\n },\n \"12-25 and if Saturday, Sunday then next Monday\": {\n \"substitute\": true,\n \"_name\": \"12-25\"\n },\n \"12-26 and if Saturday then next Monday if Monday, Sunday then next Tuesday\": {\n \"substitute\": true,\n \"_name\": \"12-26\"\n }\n },\n \"states\": {\n \"Aitutaki\": {\n \"names\": {\n \"en\": \"Aitutaki\"\n },\n \"days\": {\n \"10-26 and if Saturday, Sunday then next Monday\": {\n \"substitute\": true,\n \"name\": {\n \"en\": \"Aitutaki Gospel Day\"\n }\n }\n }\n },\n \"Atiu\": {\n \"names\": {\n \"en\": \"Atiu\"\n },\n \"days\": {\n \"07-19 and if Saturday, Sunday then next Monday\": {\n \"substitute\": true,\n \"name\": {\n \"en\": \"Atiu Gospel Day\"\n }\n }\n }\n },\n \"Mangaia\": {\n \"names\": {\n \"en\": \"Mangaia\"\n },\n \"days\": {\n \"06-15 and if Saturday, Sunday then next Monday\": {\n \"substitute\": true,\n \"name\": {\n \"en\": \"Mangaia Gospel Day\"\n }\n }\n }\n },\n \"Manihiki\": {\n \"names\": {\n \"en\": \"Manihiki\"\n },\n \"days\": {\n \"08-08 and if Saturday, Sunday then next Monday\": {\n \"substitute\": true,\n \"name\": {\n \"en\": \"Manihiki Gospel Day\"\n }\n }\n }\n },\n \"Mitiaro\": {\n \"names\": {\n \"en\": \"Mitiaro\"\n },\n \"days\": {\n \"07-21 and if Saturday, Sunday then next Monday\": {\n \"substitute\": true,\n \"name\": {\n \"en\": \"Mitiaro Gospel Day\"\n }\n }\n }\n },\n \"Palmerston\": {\n \"names\": {\n \"en\": \"Palmerston\"\n },\n \"days\": {\n \"05-25 and if Saturday, Sunday then next Monday\": {\n \"substitute\": true,\n \"name\": {\n \"en\": \"Palmerston Gospel Day\"\n }\n }\n }\n },\n \"Penrhyn\": {\n \"names\": {\n \"en\": \"Penrhyn\"\n },\n \"days\": {\n \"05-13 and if Saturday, Sunday then next Monday\": {\n \"substitute\": true,\n \"name\": {\n \"en\": \"Penrhyn Gospel Day\"\n }\n }\n }\n },\n \"Pukapuka\": {\n \"names\": {\n \"en\": \"Pukapuka\"\n },\n \"days\": {\n \"12-06 and if Saturday, Sunday then next Monday\": {\n \"substitute\": true,\n \"name\": {\n \"en\": \"Pukapuka Gospel Day\"\n }\n }\n }\n },\n \"Rakahanga\": {\n \"names\": {\n \"en\": \"Rakahanga\"\n },\n \"days\": {\n \"08-15 and if Saturday, Sunday then next Monday\": {\n \"substitute\": true,\n \"name\": {\n \"en\": \"Rakahanga Gospel Day\"\n }\n }\n }\n },\n \"Rarotonga\": {\n \"names\": {\n \"en\": \"Rarotonga\"\n },\n \"days\": {\n \"07-25 and if Saturday, Sunday then next Monday\": {\n \"substitute\": true,\n \"name\": {\n \"en\": \"Rarotonga Gospel Day\"\n }\n }\n }\n }\n }\n },\n \"CL\": {\n \"names\": {\n \"es\": \"Chile\",\n \"en\": \"Chile\"\n },\n \"dayoff\": \"sunday\",\n \"langs\": [\n \"es\"\n ],\n \"zones\": [\n \"America/Santiago\",\n \"Pacific/Easter\"\n ],\n \"days\": {\n \"01-01\": {\n \"_name\": \"01-01\"\n },\n \"easter -2\": {\n \"_name\": \"easter -2\"\n },\n \"easter\": {\n \"_name\": \"easter\"\n },\n \"05-01\": {\n \"_name\": \"05-01\"\n },\n \"05-21\": {\n \"name\": {\n \"en\": \"Navy Day\",\n \"es\": \"D\u00EDa de las Glorias Navales\"\n }\n },\n \"06-29\": {\n \"_name\": \"06-29\"\n },\n \"07-16\": {\n \"name\": {\n \"en\": \"Our Lady of Mount Carmel\",\n \"es\": \"Virgen del Carmen\"\n }\n },\n \"08-15\": {\n \"_name\": \"08-15\"\n },\n \"2022-09-16\": {\n \"name\": {\n \"es\": \"Fiestas Patrias\",\n \"en\": \"National Holiday\"\n }\n },\n \"09-18\": {\n \"name\": {\n \"en\": \"National holiday\",\n \"es\": \"Fiestas Patrias\"\n }\n },\n \"09-19\": {\n \"name\": {\n \"en\": \"Army Day\",\n \"es\": \"D\u00EDa de las Glorias del Ej\u00E9rcito\"\n }\n },\n \"10-12 if tuesday, wednesday, thursday, friday then previous monday\": {\n \"name\": {\n \"en\": \"Columbus Day\",\n \"es\": \"Encuentro de Dos Mundos\"\n }\n },\n \"10-31 if wednesday then next friday if tuesday then previous friday\": {\n \"_name\": \"Reformation Day\"\n },\n \"11-01\": {\n \"_name\": \"11-01\"\n },\n \"12-08\": {\n \"_name\": \"12-08\"\n },\n \"12-25\": {\n \"_name\": \"12-25\"\n },\n \"12-31\": {\n \"_name\": \"12-31\",\n \"type\": \"bank\"\n }\n },\n \"states\": {\n \"AP\": {\n \"name\": \"Arica y Parinacota\",\n \"days\": {\n \"06-07\": {\n \"name\": {\n \"en\": \"Battle of Arica\",\n \"es\": \"Asalto y Toma del Morro de Arica\"\n }\n }\n }\n },\n \"BI\": {\n \"name\": \"Biob\u00EDo\",\n \"regions\": {\n \"CH\": {\n \"name\": \"Chill\u00E1n y Chill\u00E1n Viejo\",\n \"days\": {\n \"08-20\": {\n \"name\": {\n \"en\": \"Nativity of Liberator Bernardo O'Higgins\",\n \"es\": \"Nacimiento del Pr\u00F3cer de la Independencia\"\n }\n }\n }\n }\n }\n },\n \"TA\": {\n \"name\": \"Tarapac\u00E1\",\n \"days\": {\n \"08-10\": {\n \"name\": {\n \"en\": \"Saint Lawrence\",\n \"es\": \"San Lorenzo de Tarapac\u00E1\"\n }\n }\n }\n }\n }\n },\n \"CM\": {\n \"names\": {\n \"fr\": \"Cameroun\",\n \"en\": \"Cameroon\"\n },\n \"dayoff\": \"sunday\",\n \"langs\": [\n \"fr\",\n \"en\"\n ],\n \"zones\": [\n \"Africa/Lagos\"\n ],\n \"days\": {\n \"01-01\": {\n \"_name\": \"01-01\"\n },\n \"02-11\": {\n \"name\": {\n \"fr\": \"F\u00EAte de la Jeunesse\",\n \"en\": \"Youth Day\"\n }\n },\n \"easter -2\": {\n \"_name\": \"easter -2\"\n },\n \"05-01 if sunday then next monday\": {\n \"_name\": \"05-01\"\n },\n \"05-20\": {\n \"name\": {\n \"fr\": \"F\u00EAte nationale ou de l'unit\u00E9\",\n \"en\": \"National Day\"\n }\n },\n \"easter 39\": {\n \"_name\": \"easter 39\"\n },\n \"08-15\": {\n \"_name\": \"08-15\"\n },\n \"12-25\": {\n \"_name\": \"12-25\"\n },\n \"1 Shawwal\": {\n \"_name\": \"1 Shawwal\"\n },\n \"10 Dhu al-Hijjah\": {\n \"_name\": \"10 Dhu al-Hijjah\"\n }\n }\n },\n \"CN\": {\n \"names\": {\n \"en\": \"China\",\n \"zh\": \"\u4E2D\u534E\u4EBA\u6C11\u5171\u548C\u56FD\"\n },\n \"dayoff\": \"sunday\",\n \"langs\": [\n \"zh\",\n \"en\"\n ],\n \"zones\": [\n \"Asia/Shanghai\",\n \"Asia/Urumqi\"\n ],\n \"days\": {\n \"01-01\": {\n \"_name\": \"01-01\"\n },\n \"03-08 12:00\": {\n \"_name\": \"03-08\",\n \"note\": \"Women\"\n },\n \"05-01\": {\n \"_name\": \"05-01\"\n },\n \"05-04 12:00\": {\n \"name\": {\n \"en\": \"Youth Day\",\n \"zh\": \"\u9752\u5E74\u8282\"\n },\n \"note\": \"Youth from the age of 14 to 28\"\n },\n \"06-01\": {\n \"name\": {\n \"en\": \"Children's Day\",\n \"zh\": \"\u516D\u4E00\u513F\u7AE5\u8282\"\n },\n \"note\": \"Children below the age of 14\"\n },\n \"08-01 12:00\": {\n \"name\": {\n \"en\": \"Army Day\",\n \"zh\": \"\u5EFA\u519B\u8282\"\n },\n \"note\": \"Military personnel in active service\"\n },\n \"10-01\": {\n \"name\": {\n \"en\": \"National Day\",\n \"zh\": \"\u56FD\u5E86\u8282\"\n }\n },\n \"10-02\": {\n \"name\": {\n \"en\": \"National Day\",\n \"zh\": \"\u56FD\u5E86\u8282\"\n }\n },\n \"10-03\": {\n \"name\": {\n \"en\": \"National Day\",\n \"zh\": \"\u56FD\u5E86\u8282\"\n }\n },\n \"chinese 01-0-00\": {\n \"name\": {\n \"en\": \"Spring Festival\",\n \"zh\": \"\u6625\u8282\"\n }\n },\n \"chinese 01-0-01\": {\n \"name\": {\n \"en\": \"Spring Festival\",\n \"zh\": \"\u6625\u8282\"\n }\n },\n \"chinese 01-0-02\": {\n \"name\": {\n \"en\": \"Spring Festival\",\n \"zh\": \"\u6625\u8282\"\n }\n },\n \"chinese 5-01 solarterm\": {\n \"name\": {\n \"en\": \"Qingming Festival\",\n \"zh\": \"\u6E05\u660E\u8282 \u6E05\u660E\u7BC0\"\n }\n },\n \"chinese 05-0-05\": {\n \"name\": {\n \"en\": \"Dragon Boat Festival\",\n \"zh\": \"\u7AEF\u5348\u8282\"\n }\n },\n \"chinese 08-0-15\": {\n \"name\": {\n \"en\": \"Mid-Autumn Festival\",\n \"zh\": \"\u4E2D\u79CB\u8282\"\n }\n },\n \"2021-01-02\": {\n \"_name\": \"01-01\"\n },\n \"2021-01-03\": {\n \"_name\": \"01-01\"\n },\n \"2021-02-14\": {\n \"name\": {\n \"en\": \"Spring Festival\",\n \"zh\": \"\u6625\u8282\"\n },\n \"note\": \"Work on Sun February 7 and Sat February 20.\"\n },\n \"2021-02-15\": {\n \"name\": {\n \"en\": \"Spring Festival\",\n \"zh\": \"\u6625\u8282\"\n }\n },\n \"2021-02-16\": {\n \"name\": {\n \"en\": \"Spring Festival\",\n \"zh\": \"\u6625\u8282\"\n }\n },\n \"2021-02-17\": {\n \"name\": {\n \"en\": \"Spring Festival\",\n \"zh\": \"\u6625\u8282\"\n }\n },\n \"2021-04-03\": {\n \"name\": {\n \"en\": \"Qingming Festival\",\n \"zh\": \"\u6E05\u660E\u8282 \u6E05\u660E\u7BC0\"\n }\n },\n \"2021-04-05\": {\n \"name\": {\n \"en\": \"Qingming Festival\",\n \"zh\": \"\u6E05\u660E\u8282 \u6E05\u660E\u7BC0\"\n }\n },\n \"2021-05-02\": {\n \"_name\": \"05-01\",\n \"note\": \"Work on Sun April 25 and Sat May 8.\"\n },\n \"2021-05-03\": {\n \"_name\": \"05-01\"\n },\n \"2021-05-04\": {\n \"_name\": \"05-01\"\n },\n \"2021-05-05\": {\n \"_name\": \"05-01\"\n },\n \"2021-06-12\": {\n \"name\": {\n \"en\": \"Dragon Boat Festival\",\n \"zh\": \"\u7AEF\u5348\u8282\"\n }\n },\n \"2021-06-13\": {\n \"name\": {\n \"en\": \"Dragon Boat Festival\",\n \"zh\": \"\u7AEF\u5348\u8282\"\n }\n },\n \"2021-09-19\": {\n \"name\": {\n \"en\": \"Mid-Autumn Festival\",\n \"zh\": \"\u4E2D\u79CB\u8282\"\n },\n \"note\": \"Work on Sat September 18.\"\n },\n \"2021-09-20\": {\n \"name\": {\n \"en\": \"Mid-Autumn Festival\",\n \"zh\": \"\u4E2D\u79CB\u8282\"\n }\n },\n \"2021-10-04\": {\n \"name\": {\n \"en\": \"National Day\",\n \"zh\": \"\u56FD\u5E86\u8282\"\n },\n \"note\": \"Work on Sun September 26 and Sat October 9.\"\n },\n \"2021-10-05\": {\n \"name\": {\n \"en\": \"National Day\",\n \"zh\": \"\u56FD\u5E86\u8282\"\n }\n },\n \"2021-10-06\": {\n \"name\": {\n \"en\": \"National Day\",\n \"zh\": \"\u56FD\u5E86\u8282\"\n }\n },\n \"2021-10-07\": {\n \"name\": {\n \"en\": \"National Day\",\n \"zh\": \"\u56FD\u5E86\u8282\"\n }\n }\n }\n },\n \"CO\": {\n \"names\": {\n \"es\": \"Colombia\",\n \"en\": \"Colombia\"\n },\n \"dayoff\": \"sunday\",\n \"langs\": [\n \"es\"\n ],\n \"zones\": [\n \"America/Bogota\"\n ],\n \"days\": {\n \"01-01\": {\n \"_name\": \"01-01\"\n },\n \"monday after 01-06\": {\n \"_name\": \"01-06\"\n },\n \"monday after 03-19\": {\n \"_name\": \"03-19\"\n },\n \"easter -7\": {\n \"_name\": \"easter -7\",\n \"type\": \"observance\"\n },\n \"easter -3\": {\n \"_name\": \"easter -3\"\n },\n \"easter -2\": {\n \"_name\": \"easter -2\"\n },\n \"easter\": {\n \"_name\": \"easter\"\n },\n \"05-01\": {\n \"_name\": \"05-01\"\n },\n \"easter 43\": {\n \"_name\": \"easter 39\"\n },\n \"easter 64\": {\n \"_name\": \"easter 60\"\n },\n \"easter 71\": {\n \"name\": {\n \"es\": \"Sagrado Coraz\u00F3n de Jes\u00FAs\",\n \"en\": \"Sacred Heart\"\n }\n },\n \"monday after 06-29\": {\n \"_name\": \"06-29\"\n },\n \"07-20\": {\n \"_name\": \"Independence Day\"\n },\n \"08-07\": {\n \"name\": {\n \"en\": \"Battle of Boyac\u00E1\",\n \"es\": \"Batalla de Boyac\u00E1\"\n }\n },\n \"monday after 08-15\": {\n \"_name\": \"08-15\"\n },\n \"monday after 10-12\": {\n \"name\": {\n \"es\": \"D\u00EDa de la Raza\",\n \"en\": \"Columbus Day\"\n }\n },\n \"1st monday in November\": {\n \"_name\": \"11-01\"\n },\n \"monday after 11-11\": {\n \"name\": {\n \"es\": \"Independencia de Cartagena\",\n \"en\": \"Independence of Cartagena\"\n }\n },\n \"12-08\": {\n \"_name\": \"12-08\"\n },\n \"12-25\": {\n \"_name\": \"12-25\"\n }\n }\n },\n \"CR\": {\n \"names\": {\n \"es\": \"Costa Rica\",\n \"en\": \"Costa Rica\"\n },\n \"dayoff\": \"sunday\",\n \"langs\": [\n \"es\"\n ],\n \"zones\": [\n \"America/Costa_Rica\"\n ],\n \"days\": {\n \"01-01\": {\n \"_name\": \"01-01\"\n },\n \"easter -3\": {\n \"_name\": \"easter -3\"\n },\n \"easter -2\": {\n \"_name\": \"easter -2\"\n },\n \"easter\": {\n \"_name\": \"easter\",\n \"type\": \"observance\"\n },\n \"04-11\": {\n \"name\": {\n \"es\": \"Gesta Heroica de Juan Santamar\u00EDa\"\n }\n },\n \"05-01\": {\n \"_name\": \"05-01\"\n },\n \"07-25\": {\n \"name\": {\n \"en\": \"Guanacaste Day\",\n \"es\": \"Anexi\u00F3n del Partido de Nicoya\"\n }\n },\n \"08-02\": {\n \"name\": {\n \"en\": \"Our Lady of Los \u00C1ngeles\",\n \"es\": \"D\u00EDa de la Virgen de los \u00C1ngeles\"\n }\n },\n \"08-15\": {\n \"_name\": \"Mothers Day\"\n },\n \"09-15\": {\n \"_name\": \"Independence Day\"\n },\n \"10-12 if monday then previous friday\": {\n \"name\": {\n \"en\": \"Columbus Day\",\n \"es\": \"D\u00EDa de la Raza\"\n }\n },\n \"12-25\": {\n \"_name\": \"12-25\"\n }\n }\n },\n \"CU\": {\n \"names\": {\n \"es\": \"Cuba\",\n \"en\": \"Cuba\"\n },\n \"dayoff\": \"sunday\",\n \"langs\": [\n \"es\"\n ],\n \"zones\": [\n \"America/Havana\"\n ],\n \"days\": {\n \"01-01\": {\n \"name\": {\n \"es\": \"Triunfo de la Revoluci\u00F3n\",\n \"en\": \"Triumph of the Revolution\"\n }\n },\n \"01-02\": {\n \"name\": {\n \"es\": \"D\u00EDa de Victoria de las Fuerzas Armadas\",\n \"en\": \"Victory of Armed Forces Day\"\n }\n },\n \"easter -2\": {\n \"_name\": \"easter -2\"\n },\n \"05-01\": {\n \"_name\": \"05-01\"\n },\n \"07-25\": {\n \"name\": {\n \"es\": \"Conmemoraci\u00F3n del asalto a Moncada\",\n \"en\": \"Day before the Commemoration of the Assault of the Moncada garrison\"\n }\n },\n \"07-26\": {\n \"name\": {\n \"es\": \"D\u00EDa de la Rebeld\u00EDa Nacional\",\n \"en\": \"Commemoration of the Assault of the Moncada garrison\"\n }\n },\n \"07-27\": {\n \"name\": {\n \"es\": \"Conmemoraci\u00F3n del asalto a Moncada\",\n \"en\": \"Day after the Commemoration of the Assault of the Moncada garrison\"\n }\n },\n \"10-10\": {\n \"_name\": \"Independence Day\"\n },\n \"12-25\": {\n \"_name\": \"12-25\"\n }\n }\n },\n \"CV\": {\n \"names\": {\n \"pt\": \"Rep\u00FAblica de Cabo Verde\",\n \"en\": \"Cape Verde\"\n },\n \"langs\": [\n \"pt\"\n ],\n \"zones\": [\n \"Atlantic/Cape_Verde\"\n ],\n \"dayoff\": \"sunday\",\n \"days\": {\n \"01-01\": {\n \"_name\": \"01-01\"\n },\n \"01-13\": {\n \"name\": {\n \"pt\": \"Dia da Democracia\",\n \"en\": \"Democracy Day\"\n }\n },\n \"01-20\": {\n \"name\": {\n \"pt\": \"Dia dos Her\u00F3is Nacionais\",\n \"en\": \"Heroes' Day\"\n }\n },\n \"easter -47\": {\n \"_name\": \"easter -47\"\n },\n \"easter -46\": {\n \"_name\": \"easter -46\"\n },\n \"easter -2\": {\n \"_name\": \"easter -2\"\n },\n \"easter\": {\n \"_name\": \"easter\",\n \"type\": \"observance\"\n },\n \"05-01\": {\n \"_name\": \"05-01\"\n },\n \"06-01\": {\n \"name\": {\n \"pt\": \"Dia das Crian\u00E7as\",\n \"en\": \"Children's Day\"\n }\n },\n \"07-05\": {\n \"_name\": \"Independence Day\"\n },\n \"08-15\": {\n \"_name\": \"08-15\",\n \"name\": {\n \"pt\": \"Dia da Padroeira Nacional\"\n }\n },\n \"09-12\": {\n \"name\": {\n \"pt\": \"Dia Nacional\",\n \"en\": \"National Day\"\n }\n },\n \"11-01\": {\n \"_name\": \"11-01\"\n },\n \"12-25\": {\n \"_name\": \"12-25\"\n }\n },\n \"states\": {\n \"S\": {\n \"name\": \"Sotavento Islands\",\n \"regions\": {\n \"PR\": {\n \"name\": \"Praia\",\n \"days\": {\n \"05-19\": {\n \"name\": {\n \"pt\": \"Dia do Munic\u00EDpio da Praia\"\n }\n }\n }\n }\n }\n }\n }\n },\n \"CW\": {\n \"names\": {\n \"nl\": \"Cura\u00E7ao\",\n \"pap\": \"K\u00F2rsou\",\n \"en\": \"Cura\u00E7ao\"\n },\n \"langs\": [\n \"nl\",\n \"pap\",\n \"en\"\n ],\n \"zones\": [\n \"America/Curacao\"\n ],\n \"dayoff\": \"sunday\",\n \"days\": {\n \"01-01\": {\n \"_name\": \"01-01\"\n },\n \"easter -48\": {\n \"_name\": \"easter -48\",\n \"name\": {\n \"en\": \"Carnival Monday\"\n }\n },\n \"easter -2\": {\n \"_name\": \"easter -2\"\n },\n \"easter\": {\n \"_name\": \"easter\",\n \"type\": \"observance\"\n },\n \"easter 1\": {\n \"_name\": \"easter 1\"\n },\n \"04-27\": {\n \"name\": {\n \"pap\": \"A\u00F1a di Rey\",\n \"nl\": \"Koningsdag\",\n \"en\": \"Kings Day\"\n }\n },\n \"05-01 if sunday then next monday\": {\n \"_name\": \"05-01\"\n },\n \"2nd sunday in May\": {\n \"_name\": \"Mothers Day\",\n \"type\": \"observance\"\n },\n \"1st sunday in June\": {\n \"_name\": \"Fathers Day\",\n \"type\": \"observance\"\n },\n \"easter 39\": {\n \"_name\": \"easter 39\",\n \"name\": {\n \"nl\": \"Hemelvaartsdag\"\n }\n },\n \"07-02\": {\n \"name\": {\n \"nl\": \"Dag van het volkslied en de Vlag\",\n \"pap\": \"Dia di Himno i Bandera\",\n \"en\": \"Flag Day\"\n }\n },\n \"10-10\": {\n \"name\": {\n \"nl\": \"Dag van het land Cura\u00E7ao\",\n \"pap\": \"Pais K\u00F2rsou\",\n \"en\": \"Cura\u00E7ao Day\"\n }\n },\n \"12-25\": {\n \"_name\": \"12-25\"\n },\n \"12-26\": {\n \"_name\": \"12-26\"\n },\n \"12-31 12:00\": {\n \"_name\": \"12-31\"\n }\n }\n },\n \"CX\": {\n \"names\": {\n \"en\": \"Christmas Island\"\n },\n \"langs\": [\n \"en\",\n \"ms\"\n ],\n \"zones\": [\n \"Indian/Christmas\"\n ],\n \"dayoff\": \"sunday\",\n \"days\": {\n \"01-01\": {\n \"_name\": \"01-01\"\n },\n \"01-26\": {\n \"name\": {\n \"en\": \"Australia Day\"\n }\n },\n \"chinese 01-0-01 P2D\": {\n \"name\": {\n \"en\": \"Chinese New Year\",\n \"zh\": \"\u6625\u8282\"\n }\n },\n \"4th monday in March\": {\n \"_name\": \"05-01\"\n },\n \"easter -2\": {\n \"_name\": \"easter -2\"\n },\n \"04-25\": {\n \"name\": {\n \"en\": \"Anzac Day\"\n }\n },\n \"1 Shawwal\": {\n \"_name\": \"1 Shawwal\",\n \"name\": {\n \"ms\": \"Hari Raya Puasa\"\n }\n },\n \"10 Dhu al-Hijjah\": {\n \"_name\": \"10 Dhu al-Hijjah\",\n \"name\": {\n \"ms\": \"Hari Raya Haji\"\n }\n },\n \"10-06\": {\n \"name\": {\n \"en\": \"Territory Day\"\n }\n },\n \"12-25\": {\n \"_name\": \"12-25\"\n },\n \"12-26\": {\n \"_name\": \"12-26\"\n }\n }\n },\n \"CY\": {\n \"names\": {\n \"el\": \"\u039A\u03CD\u03C0\u03C1\u03BF\u03C2\",\n \"en\": \"Cyprus\"\n },\n \"dayoff\": \"\",\n \"langs\": [\n \"el\"\n ],\n \"zones\": [\n \"Asia/Nicosia\"\n ],\n \"days\": {\n \"01-01\": {\n \"_name\": \"01-01\"\n },\n \"01-06\": {\n \"_name\": \"01-06\"\n },\n \"orthodox -48\": {\n \"name\": {\n \"el\": \"\u039A\u03B1\u03B8\u03B1\u03C1\u03AC \u0394\u03B5\u03C5\u03C4\u03AD\u03C1\u03B1\",\n \"en\": \"Ash Sunday\"\n },\n \"type\": \"observance\"\n },\n \"orthodox -47\": {\n \"name\": {\n \"el\": \"\u039A\u03B1\u03B8\u03B1\u03C1\u03AC \u0394\u03B5\u03C5\u03C4\u03AD\u03C1\u03B1\",\n \"en\": \"Clean Monday\"\n }\n },\n \"03-25\": {\n \"name\": {\n \"el\": \"\u0395\u03C5\u03B1\u03B3\u03B3\u03B5\u03BB\u03B9\u03C3\u03BC\u03CC\u03C2, \u0395\u03B8\u03BD\u03B9\u03BA\u03AE \u0395\u03BF\u03C1\u03C4\u03AE\",\n \"en\": \"Annunciation, Anniversary of 1821 Revolution\"\n }\n },\n \"04-01\": {\n \"name\": {\n \"en\": \"Cyprus National Day\",\n \"el\": \"\u039A\u03CD\u03C0\u03C1\u03BF\u03C2 \u0395\u03B8\u03BD\u03B9\u03BA\u03AE \u0395\u03BF\u03C1\u03C4\u03AE\"\n }\n },\n \"orthodox -2\": {\n \"_name\": \"easter -2\"\n },\n \"orthodox\": {\n \"_name\": \"easter\"\n },\n \"orthodox 1\": {\n \"_name\": \"easter 1\"\n },\n \"05-01\": {\n \"_name\": \"05-01\"\n },\n \"orthodox 49\": {\n \"_name\": \"easter 49\"\n },\n \"2nd sunday in May\": {\n \"_name\": \"Mothers Day\",\n \"type\": \"observance\"\n },\n \"08-15\": {\n \"_name\": \"08-15\"\n },\n \"10-01\": {\n \"name\": {\n \"en\": \"Cyprus Independence Day\",\n \"el\": \"\u0397\u03BC\u03AD\u03C1\u03B1 \u03C4\u03B7\u03C2 \u0391\u03BD\u03B5\u03BE\u03B1\u03C1\u03C4\u03B7\u03C3\u03AF\u03B1\u03C2 \u039A\u03CD\u03C0\u03C1\u03BF\u03C2\"\n }\n },\n \"10-28\": {\n \"_name\": \"National Holiday\",\n \"name\": {\n \"el\": \"\u0395\u03C0\u03AD\u03C4\u03B5\u03B9\u03BF\u03C2 \u03C4\u03BF\u03C5 \u038C\u03C7\u03B9\"\n }\n },\n \"12-25\": {\n \"_name\": \"12-25\"\n },\n \"12-26\": {\n \"_name\": \"12-26\"\n }\n }\n },\n \"CZ\": {\n \"names\": {\n \"cz\": \"\u010Cesk\u00E1 republika\",\n \"en\": \"Czech Republic\"\n },\n \"langs\": [\n \"cz\"\n ],\n \"zones\": [\n \"Europe/Prague\"\n ],\n \"days\": {\n \"01-01\": {\n \"_name\": \"01-01\",\n \"name\": {\n \"cz\": \"Nov\u00FD rok a Den obnovy samostatn\u00E9ho \u010Desk\u00E9ho st\u00E1tu\"\n }\n },\n \"easter -4\": {\n \"name\": {\n \"cz\": \"\u0160kared\u00E1 st\u0159eda\",\n \"en\": \"Ugly Wednesday\"\n },\n \"type\": \"observance\"\n },\n \"easter -3\": {\n \"_name\": \"easter -3\",\n \"type\": \"observance\"\n },\n \"easter -2\": {\n \"_name\": \"easter -2\"\n },\n \"easter -1\": {\n \"_name\": \"easter -1\",\n \"type\": \"observance\"\n },\n \"easter\": {\n \"_name\": \"easter\",\n \"type\": \"observance\"\n },\n \"easter 1\": {\n \"_name\": \"easter 1\"\n },\n \"05-01\": {\n \"_name\": \"05-01\"\n },\n \"05-08\": {\n \"name\": {\n \"cz\": \"Den v\u00EDt\u011Bzstv\u00ED\",\n \"en\": \"Liberation Day\"\n }\n },\n \"2nd sunday in May\": {\n \"_name\": \"Mothers Day\",\n \"type\": \"observance\"\n },\n \"07-05\": {\n \"name\": {\n \"cz\": \"Den slovansk\u00FDch v\u011Brozv\u011Bst\u016F Cyrila a Metod\u011Bje\",\n \"en\": \"Saints Cyril and Methodius Day\"\n }\n },\n \"07-06\": {\n \"name\": {\n \"cz\": \"Den up\u00E1len\u00ED mistra Jana Husa\",\n \"en\": \"Jan Hus Day\"\n }\n },\n \"09-28\": {\n \"name\": {\n \"cz\": \"Den \u010Desk\u00E9 st\u00E1tnosti\",\n \"en\": \"St. Wenceslas Day (Czech Statehood Day)\"\n }\n },\n \"10-28\": {\n \"name\": {\n \"cz\": \"Den vzniku samostatn\u00E9ho \u010Deskoslovensk\u00E9ho st\u00E1tu\",\n \"en\": \"Independent Czechoslovak State Day\"\n }\n },\n \"11-17\": {\n \"name\": {\n \"cz\": \"Den boje za svobodu a demokracii\",\n \"en\": \"Struggle for Freedom and Democracy Day\"\n }\n },\n \"12-24\": {\n \"_name\": \"12-24\"\n },\n \"12-25\": {\n \"_name\": \"12-25\"\n },\n \"12-26\": {\n \"_name\": \"12-26\"\n }\n }\n },\n \"DE\": {\n \"names\": {\n \"de\": \"Deutschland\",\n \"en\": \"Germany\"\n },\n \"dayoff\": \"sunday\",\n \"zones\": [\n \"Europe/Berlin\"\n ],\n \"langs\": [\n \"de\"\n ],\n \"days\": {\n \"01-01\": {\n \"_name\": \"01-01\"\n },\n \"02-14\": {\n \"_name\": \"02-14\",\n \"type\": \"observance\"\n },\n \"easter -52\": {\n \"name\": {\n \"de\": \"Weiberfastnacht\",\n \"en\": \"Women's Carnival Day\"\n },\n \"type\": \"observance\"\n },\n \"easter -48\": {\n \"name\": {\n \"de\": \"Rosenmontag\",\n \"en\": \"Shrove Monday\"\n },\n \"type\": \"observance\"\n },\n \"easter -47 14:00\": {\n \"_name\": \"easter -47\",\n \"type\": \"observance\"\n },\n \"easter -46\": {\n \"_name\": \"easter -46\",\n \"type\": \"observance\"\n },\n \"easter -3\": {\n \"_name\": \"easter -3\",\n \"type\": \"observance\"\n },\n \"easter -2\": {\n \"_name\": \"easter -2\"\n },\n \"easter\": {\n \"_name\": \"easter\",\n \"type\": \"observance\"\n },\n \"easter 1\": {\n \"_name\": \"easter 1\"\n },\n \"05-01\": {\n \"_name\": \"05-01\",\n \"name\": {\n \"de\": \"Maifeiertag\"\n }\n },\n \"2nd sunday in May\": {\n \"_name\": \"Mothers Day\",\n \"type\": \"observance\"\n },\n \"easter 39\": {\n \"_name\": \"easter 39\"\n },\n \"easter 49\": {\n \"_name\": \"easter 49\",\n \"type\": \"observance\"\n },\n \"easter 50\": {\n \"_name\": \"easter 50\"\n },\n \"10-03\": {\n \"_name\": \"National Holiday\",\n \"name\": {\n \"de\": \"Tag der Deutschen Einheit\"\n }\n },\n \"11-01\": {\n \"_name\": \"11-01\",\n \"type\": \"observance\"\n },\n \"11-02\": {\n \"_name\": \"11-02\",\n \"type\": \"observance\"\n },\n \"11-11\": {\n \"_name\": \"11-11\",\n \"type\": \"observance\"\n },\n \"wednesday before 11-23\": {\n \"_name\": \"Bu\u00DF- und Bettag\",\n \"type\": \"observance\"\n },\n \"6th sunday before 12-25\": {\n \"name\": {\n \"de\": \"Volkstrauertag\",\n \"en\": \"Memorial Day\"\n },\n \"type\": \"observance\"\n },\n \"5th sunday before 12-25\": {\n \"name\": {\n \"de\": \"Totensonntag\"\n },\n \"type\": \"observance\"\n },\n \"4th sunday before 12-25\": {\n \"name\": {\n \"de\": \"1. Advent\"\n },\n \"type\": \"observance\"\n },\n \"3th sunday before 12-25\": {\n \"name\": {\n \"de\": \"2. Advent\"\n },\n \"type\": \"observance\"\n },\n \"2nd sunday before 12-25\": {\n \"name\": {\n \"de\": \"3. Advent\"\n },\n \"type\": \"observance\"\n },\n \"1st sunday before 12-25\": {\n \"name\": {\n \"de\": \"4. Advent\"\n },\n \"type\": \"observance\"\n },\n \"12-24 14:00 if sunday then 00:00\": {\n \"_name\": \"12-24\",\n \"type\": \"bank\"\n },\n \"12-25\": {\n \"_name\": \"12-25\",\n \"name\": {\n \"de\": \"1. Weihnachtstag\"\n }\n },\n \"12-26\": {\n \"_name\": \"12-26\"\n },\n \"12-31 14:00 if sunday then 00:00\": {\n \"_name\": \"12-31\",\n \"type\": \"bank\"\n },\n \"2017-10-31\": {\n \"_name\": \"Reformation Day\"\n }\n },\n \"states\": {\n \"BB\": {\n \"name\": \"Brandenburg\",\n \"days\": {\n \"easter\": {\n \"_name\": \"easter\"\n },\n \"easter 49\": {\n \"_name\": \"easter 49\"\n },\n \"10-31\": {\n \"_name\": \"Reformation Day\"\n }\n }\n },\n \"BE\": {\n \"name\": \"Berlin\",\n \"days\": {\n \"03-08\": {\n \"_name\": \"03-08\",\n \"active\": [\n {\n \"from\": \"2019-01-01T00:00:00.000Z\"\n }\n ]\n },\n \"easter\": {\n \"_name\": \"easter\",\n \"type\": \"observance\"\n },\n \"easter 49\": {\n \"_name\": \"easter 49\",\n \"type\": \"observance\"\n },\n \"2020-05-08\": {\n \"name\": {\n \"de\": \"Tag der Befreiung (75. Jahrestag)\",\n \"en\": \"Liberation Day (75th Anniversary)\"\n }\n }\n }\n },\n \"BW\": {\n \"name\": \"Baden-W\u00FCrttemberg\",\n \"days\": {\n \"01-06\": {\n \"_name\": \"01-06\"\n },\n \"easter -3\": {\n \"_name\": \"easter -3\",\n \"type\": \"school\"\n },\n \"easter 60\": {\n \"_name\": \"easter 60\"\n },\n \"10-31\": {\n \"_name\": \"Reformation Day\",\n \"type\": \"school\"\n },\n \"11-01\": {\n \"_name\": \"11-01\"\n }\n }\n },\n \"BY\": {\n \"name\": \"Bayern\",\n \"days\": {\n \"01-06\": {\n \"_name\": \"01-06\"\n },\n \"02-02\": {\n \"_name\": \"02-02\",\n \"type\": \"observance\"\n },\n \"easter 60\": {\n \"_name\": \"easter 60\"\n },\n \"08-15\": {\n \"_name\": \"08-15\"\n },\n \"11-01\": {\n \"_name\": \"11-01\"\n },\n \"wednesday before 11-23\": {\n \"_name\": \"Bu\u00DF- und Bettag\",\n \"type\": \"school\"\n }\n },\n \"regions\": {\n \"A\": {\n \"name\": \"Stadt Augsburg\",\n \"days\": {\n \"08-08\": {\n \"name\": {\n \"de\": \"Augsburger Friedensfest\",\n \"en\": \"Augsburg Peace Festival\"\n }\n }\n }\n },\n \"EVANG\": {\n \"names\": {\n \"de\": \"\u00DCberwiegend evangelische Gemeinden\",\n \"en\": \"Predominantly protestant communities\"\n },\n \"days\": {\n \"08-15\": {\n \"_name\": \"08-15\",\n \"type\": \"school\"\n }\n }\n }\n }\n },\n \"HB\": {\n \"name\": \"Hansestadt Bremen\",\n \"days\": {\n \"10-31\": {\n \"_name\": \"Reformation Day\",\n \"active\": [\n {\n \"from\": \"2018-01-01T00:00:00.000Z\"\n }\n ]\n }\n }\n },\n \"HE\": {\n \"name\": \"Hessen\",\n \"days\": {\n \"easter 60\": {\n \"_name\": \"easter 60\"\n }\n }\n },\n \"HH\": {\n \"name\": \"Hansestadt Hamburg\",\n \"days\": {\n \"10-31\": {\n \"_name\": \"Reformation Day\",\n \"active\": [\n {\n \"from\": \"2018-01-01T00:00:00.000Z\"\n }\n ]\n }\n }\n },\n \"MV\": {\n \"name\": \"Mecklenburg Vorpommern\",\n \"days\": {\n \"03-08 since 2023\": {\n \"_name\": \"03-08\"\n },\n \"10-31\": {\n \"_name\": \"Reformation Day\"\n }\n }\n },\n \"NI\": {\n \"name\": \"Niedersachsen\",\n \"days\": {\n \"10-31\": {\n \"_name\": \"Reformation Day\",\n \"active\": [\n {\n \"from\": \"2018-01-01T00:00:00.000Z\"\n }\n ]\n }\n }\n },\n \"NW\": {\n \"name\": \"Nordrhein-Westfalen\",\n \"days\": {\n \"easter 60\": {\n \"_name\": \"easter 60\"\n },\n \"11-01\": {\n \"_name\": \"11-01\"\n }\n }\n },\n \"RP\": {\n \"name\": \"Rheinland-Pfalz\",\n \"days\": {\n \"easter 60\": {\n \"_name\": \"easter 60\"\n },\n \"11-01\": {\n \"_name\": \"11-01\"\n }\n }\n },\n \"SH\": {\n \"name\": \"Schleswig-Holstein\",\n \"days\": {\n \"10-31\": {\n \"_name\": \"Reformation Day\",\n \"active\": [\n {\n \"from\": \"2018-01-01T00:00:00.000Z\"\n }\n ]\n }\n }\n },\n \"SL\": {\n \"name\": \"Saarland\",\n \"days\": {\n \"easter 60\": {\n \"_name\": \"easter 60\"\n },\n \"08-15\": {\n \"_name\": \"08-15\"\n },\n \"11-01\": {\n \"_name\": \"11-01\"\n }\n }\n },\n \"SN\": {\n \"name\": \"Sachsen\",\n \"days\": {\n \"easter 60\": {\n \"_name\": \"easter 60\",\n \"type\": \"observance\"\n },\n \"10-31\": {\n \"_name\": \"Reformation Day\"\n },\n \"wednesday before 11-23\": {\n \"_name\": \"Bu\u00DF- und Bettag\"\n }\n },\n \"regions\": {\n \"BZ\": {\n \"name\": \"Landkreis Bautzen\",\n \"days\": {\n \"easter 60\": {\n \"_name\": \"easter 60\",\n \"type\": \"public\",\n \"note\": \"Bautzen (nur in den Ortsteilen Bolbritz und Salzenforst), Crostwitz, G\u00F6da (nur im Ortsteil Prischwitz), Gro\u00DFdubrau (nur im Ortsteil Sdier), Hoyerswerda (nur im Ortsteil D\u00F6rgenhausen), K\u00F6nigswartha (nicht im Ortsteil Wartha), Nebelsch\u00FCtz, Neschwitz (nur in den Ortsteilen Neschwitz und Saritsch), Panschwitz-Kuckau, Puschwitz, R\u00E4ckelwitz, Radibor, Ralbitz-Rosenthal und Wittichenau.\"\n }\n }\n }\n }\n },\n \"ST\": {\n \"name\": \"Sachsen-Anhalt\",\n \"days\": {\n \"01-06\": {\n \"_name\": \"01-06\"\n },\n \"10-31\": {\n \"_name\": \"Reformation Day\"\n }\n }\n },\n \"TH\": {\n \"name\": \"Th\u00FCringen\",\n \"days\": {\n \"easter 60\": {\n \"_name\": \"easter 60\",\n \"type\": \"observance\"\n },\n \"09-20\": {\n \"name\": {\n \"de\": \"Weltkindertag\",\n \"en\": \"International Children's Day\"\n },\n \"active\": [\n {\n \"from\": 2019\n }\n ]\n },\n \"10-31\": {\n \"_name\": \"Reformation Day\"\n }\n },\n \"regions\": {\n \"EIC\": {\n \"name\": \"Landkreis Eichfeld\",\n \"days\": {\n \"easter 60\": {\n \"_name\": \"easter 60\",\n \"type\": \"public\"\n }\n }\n },\n \"UH\": {\n \"name\": \"Unstrut-Hainich-Kreis\",\n \"days\": {\n \"easter 60\": {\n \"_name\": \"easter 60\",\n \"type\": \"public\",\n \"note\": \"In Anrode (nur in den Ortsteilen Bickenriede und Zella), D\u00FCnwald (nur in den Ortsteilen Beberstedt und H\u00FCpstedt), Rodeberg (nur im Ortsteil Struth), S\u00FCdeichsfeld\"\n }\n }\n },\n \"WAK\": {\n \"name\": \"Wartburgkreis\",\n \"days\": {\n \"easter 60\": {\n \"_name\": \"easter 60\",\n \"type\": \"public\",\n \"note\": \"In Brunnhartshausen (nur in den Ortsteilen F\u00F6hlritz und Steinberg), Buttlar, Geisa, Schleid, Zella/Rh\u00F6n\"\n }\n }\n }\n }\n }\n }\n },\n \"DJ\": {\n \"names\": {\n \"fr\": \"R\u00E9publique de Djibouti\",\n \"ar\": \"\u062C\u0645\u0647\u0648\u0631\u064A\u0629 \u062C\u064A\u0628\u0648\u062A\u064A\",\n \"so\": \"Jamhuuriyadda Jabuuti\",\n \"aa\": \"Gabuutih Ummuuno\",\n \"en\": \"Djibouti\"\n },\n \"langs\": [\n \"fr\",\n \"ar\",\n \"en\"\n ],\n \"zones\": [\n \"Africa/Nairobi\"\n ],\n \"dayoff\": \"\",\n \"days\": {\n \"01-01\": {\n \"_name\": \"01-01\"\n },\n \"05-01\": {\n \"_name\": \"05-01\"\n },\n \"06-27 since 1977\": {\n \"_name\": \"Independence Day\"\n },\n \"12-25\": {\n \"_name\": \"12-25\"\n },\n \"1 Muharram\": {\n \"_name\": \"1 Muharram\"\n },\n \"12 Rabi al-awwal\": {\n \"_name\": \"12 Rabi al-awwal\"\n },\n \"27 Rajab\": {\n \"_name\": \"27 Rajab\"\n },\n \"1 Shawwal\": {\n \"_name\": \"1 Shawwal\"\n },\n \"9 Dhu al-Hijjah\": {\n \"_name\": \"9 Dhu al-Hijjah\"\n },\n \"10 Dhu al-Hijjah\": {\n \"_name\": \"10 Dhu al-Hijjah\"\n }\n }\n },\n \"DK\": {\n \"names\": {\n \"da\": \"Danmark\",\n \"en\": \"Denmark\"\n },\n \"langs\": [\n \"da\"\n ],\n \"zones\": [\n \"Europe/Copenhagen\"\n ],\n \"days\": {\n \"01-01\": {\n \"_name\": \"01-01\"\n },\n \"easter -48\": {\n \"name\": {\n \"da\": \"Fastelavn\"\n },\n \"type\": \"observance\"\n },\n \"easter -3\": {\n \"_name\": \"easter -3\"\n },\n \"easter -2\": {\n \"_name\": \"easter -2\"\n },\n \"easter\": {\n \"_name\": \"easter\"\n },\n \"easter 1\": {\n \"_name\": \"easter 1\"\n },\n \"easter 26\": {\n \"name\": {\n \"da\": \"Store Bededag\",\n \"en\": \"Prayer Day\",\n \"de\": \"Bu\u00DF- und Bettag\"\n }\n },\n \"easter 39\": {\n \"_name\": \"easter 39\"\n },\n \"05-01\": {\n \"_name\": \"05-01\",\n \"type\": \"observance\",\n \"note\": \"Full holiday for blue collar workers\"\n },\n \"2nd sunday in May\": {\n \"_name\": \"Mothers Day\",\n \"type\": \"observance\"\n },\n \"06-05\": {\n \"_name\": \"Constitution Day\",\n \"type\": \"observance\",\n \"note\": \"Shops are closed\"\n },\n \"easter 49\": {\n \"_name\": \"easter 49\"\n },\n \"easter 50\": {\n \"_name\": \"easter 50\"\n },\n \"12-24\": {\n \"_name\": \"12-24\",\n \"type\": \"observance\",\n \"note\": \"Shops are closed\"\n },\n \"12-25\": {\n \"_name\": \"12-25\"\n },\n \"12-26\": {\n \"_name\": \"12-26\"\n }\n }\n },\n \"DM\": {\n \"names\": {\n \"en\": \"Dominica\"\n },\n \"langs\": [\n \"en\"\n ],\n \"zones\": [\n \"America/Port_of_Spain\"\n ],\n \"dayoff\": \"sunday\",\n \"days\": {\n \"01-01 and if sunday then next monday\": {\n \"_name\": \"01-01\",\n \"substitute\": true\n },\n \"easter -48\": {\n \"_name\": \"easter -48\",\n \"name\": {\n \"en\": \"Carnival Monday\"\n }\n },\n \"easter -47\": {\n \"_name\": \"easter -47\",\n \"name\": {\n \"en\": \"Carnival Tuesday\"\n }\n },\n \"easter -2\": {\n \"_name\": \"easter -2\"\n },\n \"easter\": {\n \"_name\": \"easter\",\n \"type\": \"observance\"\n },\n \"easter 1\": {\n \"_name\": \"easter 1\"\n },\n \"05-01\": {\n \"_name\": \"05-01\"\n },\n \"easter 49\": {\n \"_name\": \"easter 49\",\n \"type\": \"observance\"\n },\n \"easter 50\": {\n \"_name\": \"easter 50\"\n },\n \"1st monday in August\": {\n \"name\": {\n \"en\": \"Emancipation Day\"\n }\n },\n \"11-03 if sunday then next monday\": {\n \"_name\": \"Independence Day\"\n },\n \"11-04 if sunday then next monday if monday then next tuesday\": {\n \"name\": {\n \"en\": \"National Day of Community Service\"\n }\n },\n \"12-25 and if sunday then next tuesday\": {\n \"_name\": \"12-25\",\n \"substitute\": true\n },\n \"12-26 and if sunday then next monday\": {\n \"_name\": \"12-26\",\n \"substitute\": true\n }\n }\n },\n \"DO\": {\n \"names\": {\n \"es\": \"Rep\u00FAblica Dominicana\",\n \"en\": \"Dominican Republic\"\n },\n \"dayoff\": \"sunday\",\n \"zones\": [\n \"America/Santo_Domingo\"\n ],\n \"langs\": [\n \"es\"\n ],\n \"days\": {\n \"01-01\": {\n \"_name\": \"01-01\"\n },\n \"01-06 if tuesday,wednesday then previous monday if thursday,friday then next monday\": {\n \"_name\": \"01-06\"\n },\n \"01-21\": {\n \"name\": {\n \"es\": \"Nuestra Se\u00F1ora de la Altagracia\",\n \"en\": \"Our Lady of Altagracia\"\n }\n },\n \"01-26 if tuesday,wednesday then previous monday if thursday,friday then next monday\": {\n \"name\": {\n \"es\": \"D\u00EDa de Duarte\",\n \"en\": \"Duarte's Birthday\"\n }\n },\n \"02-27\": {\n \"_name\": \"Independence Day\"\n },\n \"easter -2\": {\n \"_name\": \"easter -2\"\n },\n \"05-01 if tuesday,wednesday then previous monday if thursday,friday,sunday then next monday\": {\n \"_name\": \"05-01\"\n },\n \"easter 60\": {\n \"_name\": \"easter 60\"\n },\n \"08-16\": {\n \"name\": {\n \"es\": \"D\u00EDa de la Restauraci\u00F3n\",\n \"en\": \"Restoration Day\"\n }\n },\n \"09-24\": {\n \"name\": {\n \"es\": \"Nuestra Se\u00F1ora de las Mercedes\",\n \"en\": \"Our Lady of las Mercedes\"\n }\n },\n \"11-06 if tuesday,wednesday,thursday,friday,saturday then next monday\": {\n \"_name\": \"Constitution Day\"\n },\n \"12-25\": {\n \"_name\": \"12-25\"\n }\n }\n },\n \"DZ\": {\n \"names\": {\n \"ar\": \"\u0627\u0644\u062C\u0645\u0647\u0648\u0631\u064A\u0629 \u0627\u0644\u062C\u0632\u0627\u0626\u0631\u064A\u0629 \u0627\u0644\u062F\u064A\u0645\u0642\u0631\u0627\u0637\u064A\u0629 \u0627\u0644\u0634\u0639\u0628\u064A\u0629\",\n \"fr\": \"R\u00E9publique alg\u00E9rienne d\u00E9mocratique et populaire\",\n \"en\": \"Algeria\"\n },\n \"langs\": [\n \"ar\",\n \"fr\",\n \"en\"\n ],\n \"zones\": [\n \"Africa/Algiers\"\n ],\n \"dayoff\": \"saturday\",\n \"days\": {\n \"01-01\": {\n \"_name\": \"01-01\"\n },\n \"01-12\": {\n \"name\": {\n \"ar\": \"\u0631\u0623\u0633 \u0627\u0644\u0633\u0646\u0629 \u0627\u0644\u0623\u0645\u0627\u0632\u064A\u063A\u064A\u0629\",\n \"fr\": \"Nouvel an amazigh\",\n \"en\": \"Amazigh New Year\"\n }\n },\n \"05-01\": {\n \"_name\": \"05-01\"\n },\n \"07-05\": {\n \"_name\": \"Independence Day\"\n },\n \"11-01\": {\n \"_name\": \"Revolution Day\"\n },\n \"1 Muharram\": {\n \"_name\": \"1 Muharram\"\n },\n \"10 Muharram\": {\n \"_name\": \"10 Muharram\"\n },\n \"12 Rabi al-awwal\": {\n \"_name\": \"12 Rabi al-awwal\"\n },\n \"1 Shawwal\": {\n \"_name\": \"1 Shawwal\"\n },\n \"10 Dhu al-Hijjah\": {\n \"_name\": \"10 Dhu al-Hijjah\"\n }\n }\n },\n \"EC\": {\n \"names\": {\n \"es\": \"Ecuador\",\n \"en\": \"Ecuador\"\n },\n \"dayoff\": \"sunday\",\n \"langs\": [\n \"es\"\n ],\n \"zones\": [\n \"America/Guayaquil\",\n \"Pacific/Galapagos\"\n ],\n \"days\": {\n \"01-01\": {\n \"_name\": \"01-01\"\n },\n \"easter -48\": {\n \"name\": {\n \"en\": \"Carnival\",\n \"es\": \"Carnaval\"\n }\n },\n \"easter -47\": {\n \"_name\": \"easter -47\"\n },\n \"easter -3\": {\n \"_name\": \"easter -3\"\n },\n \"easter -2\": {\n \"_name\": \"easter -2\"\n },\n \"easter\": {\n \"_name\": \"easter\",\n \"type\": \"observance\"\n },\n \"05-01\": {\n \"_name\": \"05-01\"\n },\n \"05-24\": {\n \"name\": {\n \"en\": \"The Battle of Pichincha\",\n \"es\": \"Batalla del Pichincha\"\n }\n },\n \"07-24\": {\n \"name\": {\n \"en\": \"The Birthday of Sim\u00F3n Bol\u00EDvar\",\n \"es\": \"El Natalicio de Sim\u00F3n Bol\u00EDvar\"\n },\n \"type\": \"observance\"\n },\n \"08-10\": {\n \"name\": {\n \"en\": \"Declaration of Independence of Quito\",\n \"es\": \"D\u00EDa del Primer Grito de Independencia de Quito\"\n }\n },\n \"09-10\": {\n \"name\": {\n \"en\": \"Independence of Guayaquil\",\n \"es\": \"Independencia de Guayaquil\"\n }\n },\n \"10-31\": {\n \"name\": {\n \"en\": \"Flag Day\",\n \"es\": \"Dia de La Bandera\"\n },\n \"type\": \"observance\"\n },\n \"11-02\": {\n \"_name\": \"11-02\"\n },\n \"11-03\": {\n \"name\": {\n \"en\": \"Independence of Cuenca\",\n \"es\": \"Independencia de Cuenca\"\n }\n },\n \"12-25\": {\n \"_name\": \"12-25\"\n },\n \"12-31\": {\n \"_name\": \"12-31\",\n \"type\": \"observance\"\n }\n },\n \"states\": {\n \"P\": {\n \"name\": \"Pichincha\",\n \"regions\": {\n \"QU\": {\n \"name\": \"Quito\",\n \"days\": {\n \"12-06\": {\n \"name\": {\n \"en\": \"Foundation of Quito\",\n \"es\": \"Aniversario de la fundaci\u00F3n de Quito\"\n },\n \"type\": \"observance\"\n }\n }\n }\n }\n }\n }\n },\n \"EE\": {\n \"names\": {\n \"et\": \"Eesti\",\n \"en\": \"Estonia\"\n },\n \"dayoff\": \"sunday\",\n \"langs\": [\n \"et\"\n ],\n \"zones\": [\n \"Europe/Tallinn\"\n ],\n \"days\": {\n \"01-01\": {\n \"_name\": \"01-01\"\n },\n \"01-06\": {\n \"_name\": \"01-06\",\n \"type\": \"observance\"\n },\n \"02-02\": {\n \"name\": {\n \"et\": \"Tartu rahulepingu aastap\u00E4ev\",\n \"en\": \"Anniversary of the Tartu Peace Treaty\"\n },\n \"type\": \"observance\"\n },\n \"02-24\": {\n \"_name\": \"Independence Day\",\n \"type\": \"public\"\n },\n \"03-14\": {\n \"name\": {\n \"et\": \"emakeelep\u00E4ev\",\n \"en\": \"Native Language Day\"\n },\n \"type\": \"observance\"\n },\n \"easter -2\": {\n \"_name\": \"easter -2\"\n },\n \"easter\": {\n \"_name\": \"easter\"\n },\n \"05-01\": {\n \"_name\": \"05-01\"\n },\n \"2nd sunday in May\": {\n \"_name\": \"Mothers Day\",\n \"type\": \"observance\"\n },\n \"easter 49\": {\n \"_name\": \"easter 49\"\n },\n \"06-04\": {\n \"name\": {\n \"et\": \"Eesti lipu p\u00E4ev\",\n \"en\": \"National Flag Day\"\n },\n \"type\": \"observance\"\n },\n \"06-14\": {\n \"name\": {\n \"et\": \"leinap\u00E4ev\",\n \"en\": \"Day of Mourning and Commemoration\"\n },\n \"type\": \"observance\"\n },\n \"06-23\": {\n \"name\": {\n \"et\": \"v\u00F5idup\u00FCha\",\n \"en\": \"Victory Day\"\n }\n },\n \"06-24\": {\n \"name\": {\n \"et\": \"jaanip\u00E4ev\",\n \"en\": \"Midsummer Day\"\n }\n },\n \"08-20\": {\n \"name\": {\n \"et\": \"taasiseseisvumisp\u00E4ev\",\n \"en\": \"Day of Restoration of Independence\"\n }\n },\n \"08-23\": {\n \"name\": {\n \"et\": \"kommunismi ja natsismi ohvrite m\u00E4lestusp\u00E4ev\",\n \"en\": \"European Day of Remembrance for Victims of Stalinism and Nazism\"\n },\n \"type\": \"observance\"\n },\n \"2nd sunday in September\": {\n \"name\": {\n \"et\": \"vanavanemate p\u00E4ev\",\n \"en\": \"Grandparents Day\"\n },\n \"type\": \"observance\"\n },\n \"09-22\": {\n \"name\": {\n \"et\": \"vastupanuv\u00F5itluse p\u00E4ev\",\n \"en\": \"Resistance Fighting Day\"\n },\n \"type\": \"observance\"\n },\n \"11-02\": {\n \"_name\": \"11-02\",\n \"type\": \"observance\"\n },\n \"2nd sunday in November\": {\n \"_name\": \"Fathers Day\",\n \"type\": \"observance\"\n },\n \"11-16\": {\n \"name\": {\n \"et\": \"taass\u00FCnni p\u00E4ev\",\n \"en\": \"Day of Declaration of Sovereignty\"\n },\n \"type\": \"observance\"\n },\n \"12-24\": {\n \"_name\": \"12-24\"\n },\n \"12-25\": {\n \"_name\": \"12-25\"\n },\n \"12-26\": {\n \"_name\": \"12-26\"\n }\n }\n },\n \"EG\": {\n \"names\": {\n \"ar\": \"\u062C\u0645\u0647\u0648\u0631\u064A\u0629 \u0645\u0635\u0631 \u0627\u0644\u0639\u0631\u0628\u064A\u0629\",\n \"en\": \"Egypt\"\n },\n \"langs\": [\n \"ar\",\n \"en\"\n ],\n \"zones\": [\n \"Africa/Cairo\"\n ],\n \"dayoff\": \"saturday\",\n \"days\": {\n \"01-25 since 2011\": {\n \"name\": {\n \"ar\": \"\u0639\u064A\u062F \u062B\u0648\u0631\u0629 25 \u064A\u0646\u0627\u064A\u0631\",\n \"en\": \"Revolution Day 2011\"\n }\n },\n \"01-25\": {\n \"name\": {\n \"ar\": \"\u0639\u064A\u062F \u0627\u0644\u0634\u0631\u0637\u0629\",\n \"en\": \"National Police Day\"\n }\n },\n \"04-25\": {\n \"name\": {\n \"ar\": \"\u0639\u064A\u062F \u062A\u062D\u0631\u064A\u0631 \u0633\u064A\u0646\u0627\u0621\",\n \"en\": \"Sinai Liberation Day\"\n }\n },\n \"05-01\": {\n \"_name\": \"05-01\"\n },\n \"06-30\": {\n \"name\": {\n \"ar\": \"\u0639\u064A\u062F \u062B\u0648\u0631\u0629 30 \u064A\u0648\u0646\u064A\u0648\",\n \"en\": \"30 June Day\"\n }\n },\n \"07-23\": {\n \"_name\": \"Revolution Day\"\n },\n \"10-06\": {\n \"name\": {\n \"ar\": \"\u0639\u064A\u062F \u0627\u0644\u0642\u0648\u0627\u062A \u0627\u0644\u0645\u0633\u0644\u062D\u0629\",\n \"en\": \"Armed Forces Day\"\n }\n },\n \"orthodox 1\": {\n \"name\": {\n \"ar\": \"\u0634\u0645 \u0627\u0644\u0646\u0633\u064A\u0645\",\n \"en\": \"Sham El Nessim\"\n }\n },\n \"julian 12-25\": {\n \"_name\": \"12-25\"\n },\n \"1 Muharram\": {\n \"_name\": \"1 Muharram\"\n },\n \"12 Rabi al-awwal\": {\n \"_name\": \"12 Rabi al-awwal\"\n },\n \"1 Shawwal P3D\": {\n \"_name\": \"1 Shawwal\"\n },\n \"10 Dhu al-Hijjah P4D\": {\n \"_name\": \"10 Dhu al-Hijjah\"\n }\n }\n },\n \"EH\": {\n \"names\": {\n \"ar\": \"\u0627\u0644\u062C\u0645\u0647\u0648\u0631\u064A\u0629 \u0627\u0644\u0639\u0631\u0628\u064A\u0629 \u0627\u0644\u0635\u062D\u0631\u0627\u0648\u064A\u0629 \u0627\u0644\u062F\u064A\u0645\u0642\u0631\u0627\u0637\u064A\u0629\",\n \"en\": \"Western Sahara\"\n },\n \"langs\": [],\n \"zones\": [\n \"Africa/El_Aaiun\"\n ],\n \"dayoff\": \"\",\n \"days\": {\n \"02-27\": {\n \"_name\": \"Independence Day\"\n },\n \"03-08\": {\n \"name\": {\n \"en\": \"First Martyr\"\n }\n },\n \"05-10\": {\n \"name\": {\n \"en\": \"May 20 Revolution\"\n }\n },\n \"06-09\": {\n \"name\": {\n \"en\": \"Day of the Martyrs\"\n }\n },\n \"06-17\": {\n \"name\": {\n \"en\": \"Day of National Unity\"\n }\n },\n \"1 Muharram\": {\n \"_name\": \"1 Muharram\"\n },\n \"12 Rabi al-awwal\": {\n \"_name\": \"12 Rabi al-awwal\"\n },\n \"1 Shawwal P2D\": {\n \"_name\": \"1 Shawwal\"\n },\n \"10 Dhu al-Hijjah P2D\": {\n \"_name\": \"10 Dhu al-Hijjah\"\n }\n }\n },\n \"ER\": {\n \"names\": {\n \"en\": \"Eritrea\"\n },\n \"langs\": [\n \"ti\",\n \"en\"\n ],\n \"zones\": [\n \"Africa/Nairobi\"\n ],\n \"dayoff\": \"\",\n \"days\": {\n \"01-01\": {\n \"_name\": \"01-01\"\n },\n \"julian 12-25\": {\n \"_name\": \"julian 12-25\"\n },\n \"julian 01-06\": {\n \"_name\": \"01-06\"\n },\n \"02-10\": {\n \"name\": {\n \"ti\": \"\u1348\u1295\u1245\u120D\",\n \"en\": \"Fenkil Day\"\n }\n },\n \"03-08\": {\n \"_name\": \"03-08\"\n },\n \"orthodox -2\": {\n \"_name\": \"orthodox -2\"\n },\n \"orthodox\": {\n \"_name\": \"orthodox\"\n },\n \"05-01\": {\n \"_name\": \"05-01\"\n },\n \"05-24\": {\n \"_name\": \"Independence Day\"\n },\n \"06-20\": {\n \"name\": {\n \"en\": \"Martyrs' Day\",\n \"ti\": \"\u1218\u12D3\u120D\u1272 \u1235\u12CD\u12A3\u1275\"\n }\n },\n \"09-01\": {\n \"_name\": \"Revolution Day\"\n },\n \"09-11 in non-leap years\": {\n \"name\": {\n \"en\": \"Geez New Year\",\n \"ti\": \"\u130D\u12D5\u12DD \u12A0\u12F2\u1235 \u12D3\u1218\u1275\"\n }\n },\n \"09-12 in leap years\": {\n \"name\": {\n \"en\": \"Geez New Year\",\n \"ti\": \"\u130D\u12D5\u12DD \u12A0\u12F2\u1235 \u12D3\u1218\u1275\"\n }\n },\n \"09-27 in non-leap years\": {\n \"name\": {\n \"en\": \"Meskel\"\n }\n },\n \"09-28 in leap years\": {\n \"name\": {\n \"en\": \"Meskel\"\n }\n },\n \"12-25\": {\n \"_name\": \"12-25\"\n },\n \"12 Rabi al-awwal\": {\n \"_name\": \"12 Rabi al-awwal\"\n },\n \"1 Shawwal\": {\n \"_name\": \"1 Shawwal\"\n },\n \"10 Dhu al-Hijjah\": {\n \"_name\": \"10 Dhu al-Hijjah\"\n }\n }\n },\n \"ES\": {\n \"names\": {\n \"es\": \"Espa\u00F1a\",\n \"ca\": \"Espanya\",\n \"en\": \"Spain\"\n },\n \"langs\": [\n \"es\"\n ],\n \"zones\": [\n \"Europe/Madrid\",\n \"Africa/Ceuta\",\n \"Atlantic/Canary\"\n ],\n \"days\": {\n \"01-01\": {\n \"_name\": \"01-01\"\n },\n \"substitutes 01-01 if sunday then next monday\": {\n \"type\": \"observance\",\n \"substitute\": true,\n \"_name\": \"01-01\"\n },\n \"01-06\": {\n \"_name\": \"01-06\"\n },\n \"substitutes 01-06 if sunday then next monday\": {\n \"type\": \"observance\",\n \"substitute\": true,\n \"_name\": \"01-06\"\n },\n \"03-19\": {\n \"_name\": \"03-19\",\n \"type\": \"observance\"\n },\n \"easter -3\": {\n \"_name\": \"easter -3\"\n },\n \"easter -2\": {\n \"_name\": \"easter -2\"\n },\n \"easter\": {\n \"_name\": \"easter\",\n \"type\": \"observance\"\n },\n \"05-01\": {\n \"_name\": \"05-01\"\n },\n \"1st sunday in May\": {\n \"_name\": \"Mothers Day\",\n \"type\": \"observance\"\n },\n \"easter 49\": {\n \"_name\": \"easter 49\",\n \"type\": \"observance\"\n },\n \"07-25\": {\n \"name\": {\n \"es\": \"Santiago Apostol\"\n },\n \"type\": \"observance\",\n \"note\": \"regional\"\n },\n \"08-15\": {\n \"_name\": \"08-15\"\n },\n \"10-12\": {\n \"name\": {\n \"es\": \"Fiesta Nacional de Espa\u00F1a\"\n }\n },\n \"substitutes 10-12 if sunday then next monday\": {\n \"substitute\": true,\n \"type\": \"observance\",\n \"name\": {\n \"es\": \"Fiesta Nacional de Espa\u00F1a\"\n }\n },\n \"11-01\": {\n \"_name\": \"11-01\"\n },\n \"substitutes 11-01 if sunday then next monday\": {\n \"substitute\": true,\n \"type\": \"observance\",\n \"_name\": \"11-01\"\n },\n \"12-06\": {\n \"name\": {\n \"es\": \"D\u00EDa de la Constituci\u00F3n Espa\u00F1ola\"\n }\n },\n \"substitutes 12-06 if sunday then next monday\": {\n \"type\": \"observance\",\n \"substitute\": true,\n \"name\": {\n \"es\": \"D\u00EDa de la Constituci\u00F3n Espa\u00F1ola\"\n }\n },\n \"12-08\": {\n \"_name\": \"12-08\"\n },\n \"substitutes 12-08 if sunday then next monday\": {\n \"type\": \"observance\",\n \"substitute\": true,\n \"_name\": \"12-08\"\n },\n \"12-25\": {\n \"_name\": \"12-25\"\n },\n \"substitutes 12-25 if sunday then next monday\": {\n \"substitute\": true,\n \"_name\": \"12-25\"\n }\n },\n \"states\": {\n \"AN\": {\n \"name\": \"Andaluc\u00EDa\",\n \"days\": {\n \"02-28\": {\n \"name\": {\n \"es\": \"D\u00EDa de Andaluc\u00EDa\"\n }\n },\n \"substitutes 02-28 if Sunday then next Monday\": {\n \"substitute\": true,\n \"name\": {\n \"es\": \"D\u00EDa de Andaluc\u00EDa\"\n }\n },\n \"substitutes 05-01 if Sunday then next Monday\": {\n \"substitute\": true,\n \"_name\": \"05-01\"\n },\n \"substitutes 08-15 if Sunday then next Monday\": {\n \"substitute\": true,\n \"_name\": \"08-15\"\n },\n \"easter -3\": {\n \"_name\": \"easter -3\"\n }\n }\n },\n \"AR\": {\n \"name\": \"Arag\u00F3n\",\n \"days\": {\n \"04-23\": {\n \"name\": {\n \"es\": \"D\u00EDa de Arag\u00F3n\"\n }\n },\n \"substitutes 04-23 if Sunday then next Monday\": {\n \"substitute\": true,\n \"name\": {\n \"es\": \"D\u00EDa de Arag\u00F3n\"\n }\n },\n \"substitutes 05-01 if Sunday then next Monday\": {\n \"substitute\": true,\n \"_name\": \"05-01\"\n },\n \"substitutes 08-15 if Sunday then next Monday\": {\n \"substitute\": true,\n \"_name\": \"08-15\"\n }\n }\n },\n \"AS\": {\n \"name\": \"Asturias\",\n \"days\": {\n \"substitutes 05-01 if Sunday then next Monday\": {\n \"substitute\": true,\n \"_name\": \"05-01\"\n },\n \"substitutes 08-15 if Sunday then next Monday\": {\n \"substitute\": true,\n \"_name\": \"08-15\"\n },\n \"09-08\": {\n \"name\": \"D\u00EDa de Asturias\"\n },\n \"substitutes 09-08 if Sunday then next Monday\": {\n \"substitute\": true,\n \"name\": \"D\u00EDa de Asturias\"\n }\n }\n },\n \"CB\": {\n \"name\": \"Cantabria\",\n \"days\": {\n \"06-28\": {\n \"name\": \"D\u00EDa de las Instituciones de Cantabria\"\n },\n \"substitutes 06-28 if Sunday then next Monday\": {\n \"name\": \"D\u00EDa de las Instituciones de Cantabria\"\n },\n \"09-15\": {\n \"name\": \"La Bien Aparecida\"\n },\n \"substitutes 09-15 if Sunday then next Monday\": {\n \"name\": \"La Bien Aparecida\"\n }\n }\n },\n \"CE\": {\n \"name\": \"Ciudad de Ceuta\",\n \"days\": {\n \"08-05\": {\n \"name\": \"Nuestra Se\u00F1ora de \u00C1frica\"\n },\n \"substitutes 08-05 if Sunday then next Monday\": {\n \"substitute\": true,\n \"name\": \"Nuestra Se\u00F1ora de \u00C1frica\"\n },\n \"09-02\": {\n \"name\": \"D\u00EDa de Ceuta\"\n },\n \"substitutes 09-02 if Sunday then next Monday\": {\n \"substitute\": true,\n \"name\": \"D\u00EDa de Ceuta\"\n },\n \"9 Dhu al-Hijjah\": {\n \"_name\": \"9 Dhu al-Hijjah\"\n }\n }\n },\n \"CL\": {\n \"names\": {\n \"es\": \"Castilla y Le\u00F3n\",\n \"en\": \"Castile and Le\u00F3n\"\n },\n \"days\": {\n \"04-23\": {\n \"name\": \"Fiesta de Castilla y Le\u00F3n\"\n },\n \"substitutes 04-23 if Sunday then next Monday\": {\n \"substitute\": true,\n \"name\": \"Fiesta de Castilla y Le\u00F3n\"\n },\n \"substitutes 05-01 if Sunday then next Monday\": {\n \"substitute\": true,\n \"_name\": \"05-01\"\n },\n \"substitutes 08-15 if Sunday then next Monday\": {\n \"substitute\": true,\n \"_name\": \"08-15\"\n }\n }\n },\n \"CM\": {\n \"name\": \"Castile-La Mancha\",\n \"days\": {\n \"05-31 since 2020\": {\n \"name\": \"D\u00EDa de Castilla-La Mancha\"\n },\n \"substitutes 05-31 if Sunday then next Monday since 2020\": {\n \"substitute\": true,\n \"name\": \"D\u00EDa de Castilla-La Mancha\"\n },\n \"easter 60\": {\n \"_name\": \"easter 60\"\n }\n }\n },\n \"CN\": {\n \"names\": {\n \"es\": \"Islas Canarias\",\n \"en\": \"Canary Islands\"\n },\n \"zones\": [\n \"Atlantic/Canary\"\n ],\n \"dayoff\": \"sunday\",\n \"_days\": \"IC\",\n \"regions\": {\n \"EH\": {\n \"names\": {\n \"es\": \"El Hierro\"\n },\n \"_days\": [\n \"IC\",\n \"regions\",\n \"EH\"\n ]\n },\n \"FU\": {\n \"names\": {\n \"es\": \"Fuerteventura\"\n },\n \"_days\": [\n \"IC\",\n \"regions\",\n \"FU\"\n ]\n },\n \"GC\": {\n \"names\": {\n \"es\": \"Gran Canaria\"\n },\n \"_days\": [\n \"IC\",\n \"regions\",\n \"GC\"\n ]\n },\n \"LG\": {\n \"names\": {\n \"es\": \"La Gomera\"\n },\n \"_days\": [\n \"IC\",\n \"regions\",\n \"LG\"\n ]\n },\n \"LP\": {\n \"names\": {\n \"es\": \"La Palma\"\n },\n \"_days\": [\n \"IC\",\n \"regions\",\n \"LP\"\n ]\n },\n \"LA\": {\n \"names\": {\n \"es\": \"Lanzarote\"\n },\n \"_days\": [\n \"IC\",\n \"regions\",\n \"LA\"\n ]\n },\n \"TE\": {\n \"names\": {\n \"es\": \"Tenerife\"\n },\n \"_days\": [\n \"IC\",\n \"regions\",\n \"TE\"\n ]\n }\n }\n },\n \"CT\": {\n \"names\": {\n \"ca\": \"Catalunya\",\n \"es\": \"Catalu\u00F1a\",\n \"en\": \"Catalonia\"\n },\n \"days\": {\n \"09-11\": {\n \"name\": {\n \"ca\": \"Diada de Catalunya\",\n \"es\": \"Dia de Catalu\u00F1a\"\n }\n },\n \"06-24\": {\n \"name\": {\n \"ca\": \"Sant Joan\",\n \"es\": \"San Juan\"\n }\n },\n \"easter -3\": {\n \"_name\": \"easter -3\",\n \"type\": \"observance\"\n },\n \"easter 1\": {\n \"_name\": \"easter 1\"\n },\n \"easter 50\": {\n \"_name\": \"easter 50\"\n },\n \"substitutes 05-01 if Saturday, Sunday then next Monday\": {\n \"substitute\": true,\n \"_name\": \"05-01\"\n },\n \"09-24 if sunday then next monday\": {\n \"name\": {\n \"es\": \"Mare de D\u00E9u de la Merc\u00E8\"\n }\n },\n \"12-26\": {\n \"name\": {\n \"ca\": \"Sant Esteve\",\n \"es\": \"San Esteban\"\n },\n \"type\": \"observance\"\n }\n }\n },\n \"EX\": {\n \"name\": \"Extremadura\",\n \"days\": {\n \"substitutes 05-01 if Sunday then next Monday\": {\n \"substitute\": true,\n \"_name\": \"05-01\"\n },\n \"09-08\": {\n \"name\": \"D\u00EDa de Extremadura\"\n },\n \"substitutes 09-08 if Sunday then next Monday\": {\n \"substitute\": true,\n \"name\": \"D\u00EDa de Extremadura\"\n }\n }\n },\n \"GA\": {\n \"name\": \"Galicia\",\n \"days\": {\n \"05-17\": {\n \"name\": \"D\u00EDa de las Letras Gallegas\"\n },\n \"substitutes 05-17 if Sunday then next Monday\": {\n \"substitute\": true,\n \"name\": \"D\u00EDa de las Letras Gallegas\"\n },\n \"07-25\": {\n \"name\": \"D\u00EDa Nacional de Galicia\"\n },\n \"substitutes 07-25 if Sunday then next Monday\": {\n \"substitute\": true,\n \"name\": \"D\u00EDa Nacional de Galicia\"\n }\n }\n },\n \"IB\": {\n \"names\": {\n \"es\": \"Illes Balears\",\n \"en\": \"Balearic Islands\"\n },\n \"days\": {\n \"03-01\": {\n \"name\": {\n \"es\": \"D\u00EDa de les Illes Balears\"\n }\n },\n \"substitutes 03-01 if Sunday then next Monday\": {\n \"substitute\": true,\n \"name\": {\n \"es\": \"D\u00EDa de les Illes Balears\"\n }\n },\n \"easter 1\": {\n \"_name\": \"easter 1\"\n },\n \"12-26\": {\n \"name\": {\n \"es\": \"Sant Esteve\"\n },\n \"type\": \"observance\"\n }\n }\n },\n \"MC\": {\n \"name\": \"Murcia Region\",\n \"days\": {\n \"substitutes 05-01 if Sunday then next Monday\": {\n \"substitute\": true,\n \"_name\": \"05-01\"\n }\n }\n },\n \"MD\": {\n \"name\": \"Comunidad de Madrid\",\n \"days\": {\n \"05-02 if Sunday then next Monday\": {\n \"name\": {\n \"es\": \"D\u00EDa de la Comunidad de Madrid\"\n }\n },\n \"substitutes 05-02 if Sunday then next Monday\": {\n \"substitute\": true,\n \"name\": {\n \"es\": \"D\u00EDa de la Comunidad de Madrid\"\n }\n },\n \"05-16\": {\n \"name\": {\n \"es\": \"San Isidro Labrador\"\n },\n \"type\": \"observance\"\n },\n \"07-25\": {\n \"name\": \"Santiago Ap\u00F3stol\"\n },\n \"substitutes 07-25 if Sunday then next Monday\": {\n \"substitute\": true,\n \"name\": \"Santiago Ap\u00F3stol\"\n },\n \"11-09 if sunday then next monday\": {\n \"name\": {\n \"es\": \"Nuestra Se\u00F1ora de la Almudena\"\n },\n \"type\": \"observance\"\n }\n }\n },\n \"ML\": {\n \"name\": \"Ciudad de Melilla\",\n \"days\": {\n \"1 Shawwal\": {\n \"_name\": \"1 Shawwal\"\n },\n \"10 Dhu al-Hijjah\": {\n \"_name\": \"10 Dhu al-Hijjah\"\n }\n }\n },\n \"NC\": {\n \"names\": {\n \"es\": \"Comunidad Foral de Navarra\",\n \"en\": \"Navarra Chartered Community\"\n },\n \"days\": {\n \"easter 1\": {\n \"_name\": \"easter 1\"\n },\n \"07-25\": {\n \"name\": \"Santiago Ap\u00F3stol\"\n },\n \"substitutes 07-25 if Sunday then next Monday\": {\n \"substitute\": true,\n \"name\": \"Santiago Ap\u00F3stol\"\n }\n }\n },\n \"PV\": {\n \"names\": {\n \"es\": \"Pa\u00EDs Vasco\",\n \"en\": \"Basque Country\"\n },\n \"days\": {\n \"easter 1\": {\n \"_name\": \"easter 1\"\n },\n \"07-25\": {\n \"name\": \"Santiago Ap\u00F3stol\"\n },\n \"substitutes 07-25 if Sunday then next Monday\": {\n \"substitute\": true,\n \"name\": \"Santiago Ap\u00F3stol\"\n },\n \"2022-09-06\": {\n \"name\": \"V Centenario Vuelta al Mundo\"\n }\n }\n },\n \"RI\": {\n \"name\": \"La Rioja\",\n \"days\": {\n \"easter 1\": {\n \"_name\": \"easter 1\"\n }\n }\n },\n \"VC\": {\n \"names\": {\n \"es\": \"Comunitat Valenciana\",\n \"en\": \"Valencian Community\"\n },\n \"days\": {\n \"03-19\": {\n \"_name\": \"03-19\"\n },\n \"easter 1\": {\n \"_name\": \"easter 1\"\n }\n }\n }\n }\n },\n \"ET\": {\n \"names\": {\n \"am\": \"\u12A2\u1275\u12EE\u1335\u12EB\",\n \"en\": \"Ethiopia\"\n },\n \"dayoff\": \"sunday\",\n \"langs\": [\n \"am\",\n \"en\"\n ],\n \"zones\": [\n \"Africa/Nairobi\"\n ],\n \"days\": {\n \"01-06 in non-leap years\": {\n \"_name\": \"12-25\"\n },\n \"01-07 in leap years\": {\n \"_name\": \"12-25\"\n },\n \"01-19\": {\n \"_name\": \"01-06\"\n },\n \"03-02\": {\n \"name\": {\n \"am\": \"\u12E8\u12D3\u12F5\u12CB \u12F5\u120D \u1260\u12D3\u120D\",\n \"en\": \"Victory at Adwa Day\"\n }\n },\n \"03-28\": {\n \"name\": {\n \"am\": \"\u12E8\u1240\u12ED \u123D\u1265\u122D \u1218\u1273\u1230\u1262\u12EB \u1240\u1295\",\n \"en\": \"Day of Lament\"\n }\n },\n \"orthodox -2\": {\n \"_name\": \"easter -2\"\n },\n \"orthodox\": {\n \"_name\": \"easter\"\n },\n \"05-28\": {\n \"name\": {\n \"am\": \"\u12F0\u122D\u130D \u12E8\u12C8\u12F0\u1240\u1260\u1275 \u1240\u1295\",\n \"en\": \"Derg Downfall Day\"\n }\n },\n \"09-11 in non-leap years\": {\n \"_name\": \"01-01\"\n },\n \"09-12 in leap years\": {\n \"_name\": \"01-01\"\n },\n \"09-27 in non-leap years\": {\n \"name\": {\n \"am\": \"\u1265\u122D\u1210\u1290-\u1218\u1235\u1240\u120D\",\n \"en\": \"Finding of the True Cross\"\n }\n },\n \"09-28 in leap years\": {\n \"name\": {\n \"am\": \"\u1265\u122D\u1210\u1290-\u1218\u1235\u1240\u120D\",\n \"en\": \"Finding of the True Cross\"\n }\n },\n \"1 Ramadan\": {\n \"_name\": \"1 Ramadan\"\n },\n \"12 Rabi al-awwal\": {\n \"_name\": \"12 Rabi al-awwal\"\n },\n \"1 Shawwal\": {\n \"_name\": \"1 Shawwal\"\n },\n \"10 Dhu al-Hijjah\": {\n \"_name\": \"10 Dhu al-Hijjah\"\n }\n }\n },\n \"FI\": {\n \"names\": {\n \"fi\": \"Suomi\",\n \"en\": \"Finland\"\n },\n \"dayoff\": \"sunday\",\n \"langs\": [\n \"fi\"\n ],\n \"zones\": [\n \"Europe/Helsinki\"\n ],\n \"days\": {\n \"01-01\": {\n \"_name\": \"01-01\"\n },\n \"01-06\": {\n \"_name\": \"01-06\"\n },\n \"easter -2\": {\n \"_name\": \"easter -2\"\n },\n \"easter\": {\n \"_name\": \"easter\"\n },\n \"easter 1\": {\n \"_name\": \"easter 1\"\n },\n \"05-01\": {\n \"_name\": \"05-01\"\n },\n \"easter 39\": {\n \"_name\": \"easter 39\"\n },\n \"easter 49\": {\n \"_name\": \"easter 49\"\n },\n \"2nd sunday in May\": {\n \"_name\": \"Mothers Day\",\n \"type\": \"observance\"\n },\n \"friday after 06-19\": {\n \"name\": {\n \"fi\": \"Juhannusaatto\",\n \"en\": \"Midsummer Eve\",\n \"sv\": \"Midsommarafton\"\n },\n \"type\": \"bank\"\n },\n \"saturday after 06-20\": {\n \"name\": {\n \"fi\": \"Juhannusp\u00E4iv\u00E4\",\n \"en\": \"Midsummer Day\",\n \"sv\": \"Midsommardagen\"\n }\n },\n \"saturday after 10-31\": {\n \"_name\": \"11-01\"\n },\n \"2nd sunday in November\": {\n \"_name\": \"Fathers Day\",\n \"type\": \"observance\"\n },\n \"12-06\": {\n \"_name\": \"Independence Day\"\n },\n \"12-24\": {\n \"_name\": \"12-24\",\n \"type\": \"bank\"\n },\n \"12-25\": {\n \"_name\": \"12-25\"\n },\n \"12-26\": {\n \"_name\": \"12-26\"\n },\n \"12-31 14:00 if sunday then 00:00\": {\n \"_name\": \"12-31\",\n \"type\": \"bank\"\n }\n }\n },\n \"FJ\": {\n \"names\": {\n \"fj\": \"Matanitu Tugalala o Viti\",\n \"en\": \"Fiji\"\n },\n \"langs\": [\n \"fj\",\n \"en\"\n ],\n \"zones\": [\n \"Pacific/Fiji\"\n ],\n \"dayoff\": \"sunday\",\n \"days\": {\n \"01-01\": {\n \"_name\": \"01-01\"\n },\n \"easter -2\": {\n \"_name\": \"easter -2\"\n },\n \"easter -1\": {\n \"_name\": \"easter -1\"\n },\n \"easter\": {\n \"_name\": \"easter\",\n \"type\": \"observance\"\n },\n \"easter 1\": {\n \"_name\": \"easter 1\"\n },\n \"09-07\": {\n \"_name\": \"Constitution Day\"\n },\n \"10-10 and if Sunday then next Monday\": {\n \"substitute\": true,\n \"name\": {\n \"en\": \"Fiji Day\"\n }\n },\n \"12-25 if Sunday then next Monday\": {\n \"_name\": \"12-25\"\n },\n \"12-26 if Sunday then next Monday if Monday then next Tuesday\": {\n \"_name\": \"12-26\"\n },\n \"12 Rabi al-awwal\": {\n \"_name\": \"12 Rabi al-awwal\"\n },\n \"2014-10-22\": {\n \"_name\": \"Deepavali\",\n \"name\": {\n \"en\": \"Diwali\"\n }\n },\n \"2015-11-10\": {\n \"_name\": \"Deepavali\",\n \"name\": {\n \"en\": \"Diwali\"\n }\n },\n \"2016-10-29\": {\n \"_name\": \"Deepavali\",\n \"name\": {\n \"en\": \"Diwali\"\n }\n },\n \"2017-10-19\": {\n \"_name\": \"Deepavali\",\n \"name\": {\n \"en\": \"Diwali\"\n }\n },\n \"2018-11-07\": {\n \"_name\": \"Deepavali\",\n \"name\": {\n \"en\": \"Diwali\"\n }\n },\n \"2019-10-27\": {\n \"_name\": \"Deepavali\",\n \"name\": {\n \"en\": \"Diwali\"\n }\n },\n \"2019-10-28\": {\n \"substitute\": true,\n \"_name\": \"Deepavali\",\n \"name\": {\n \"en\": \"Diwali\"\n }\n },\n \"2020-11-14\": {\n \"_name\": \"Deepavali\",\n \"name\": {\n \"en\": \"Diwali\"\n }\n },\n \"2020-11-16\": {\n \"substitute\": true,\n \"_name\": \"Deepavali\",\n \"name\": {\n \"en\": \"Diwali\"\n }\n },\n \"2021-11-04\": {\n \"_name\": \"Deepavali\",\n \"name\": {\n \"en\": \"Diwali\"\n }\n },\n \"2022-10-24\": {\n \"_name\": \"Deepavali\",\n \"name\": {\n \"en\": \"Diwali\"\n }\n },\n \"2023-11-12\": {\n \"_name\": \"Deepavali\",\n \"name\": {\n \"en\": \"Diwali\"\n }\n },\n \"2023-11-13\": {\n \"substitute\": true,\n \"_name\": \"Deepavali\",\n \"name\": {\n \"en\": \"Diwali\"\n }\n },\n \"2024-11-01\": {\n \"_name\": \"Deepavali\",\n \"name\": {\n \"en\": \"Diwali\"\n }\n },\n \"2025-10-21\": {\n \"_name\": \"Deepavali\",\n \"name\": {\n \"en\": \"Diwali\"\n }\n }\n }\n },\n \"FO\": {\n \"names\": {\n \"fo\": \"F\u00F8royar\",\n \"da\": \"F\u00E6r\u00F8erne\",\n \"en\": \"Faroe Islands\"\n },\n \"langs\": [\n \"fo\",\n \"da\"\n ],\n \"zones\": [\n \"Atlantic/Faroe\"\n ],\n \"dayoff\": \"sunday\",\n \"days\": {\n \"01-01\": {\n \"_name\": \"01-01\"\n },\n \"easter -3\": {\n \"_name\": \"easter -3\"\n },\n \"easter -2\": {\n \"_name\": \"easter -2\"\n },\n \"easter\": {\n \"_name\": \"easter\"\n },\n \"easter 1\": {\n \"_name\": \"easter 1\"\n },\n \"04-24\": {\n \"name\": {\n \"fo\": \"Flaggdagur\",\n \"da\": \"Flagdag\",\n \"en\": \"Flag Day\"\n }\n },\n \"easter 26\": {\n \"name\": {\n \"fo\": \"D\u00FDri bi\u00F0idagur\",\n \"en\": \"Great Prayer Day\"\n }\n },\n \"easter 39\": {\n \"_name\": \"easter 39\"\n },\n \"easter 49\": {\n \"_name\": \"easter 49\"\n },\n \"easter 50\": {\n \"_name\": \"easter 50\"\n },\n \"06-05 12:00 if sunday then 00:00\": {\n \"_name\": \"Constitution Day\"\n },\n \"07-28 12:00 if sunday then 00:00\": {\n \"name\": {\n \"da\": \"Sankt Olavsaften\",\n \"en\": \"St.Olav's Eve\"\n },\n \"note\": \"half-day holiday for some workers' unions\",\n \"type\": \"observance\"\n },\n \"07-29\": {\n \"name\": {\n \"fo\": \"\u00D3lavs\u00F8ka\",\n \"da\": \"Sankt Olavs Dag\",\n \"en\": \"St.Olav's Day\"\n },\n \"note\": \"full holiday for most workers' unions\",\n \"type\": \"observance\"\n },\n \"12-24\": {\n \"_name\": \"12-24\"\n },\n \"12-25\": {\n \"_name\": \"12-25\"\n },\n \"12-26\": {\n \"_name\": \"12-26\"\n },\n \"12-31 12:00 if sunday then 00:00\": {\n \"_name\": \"12-31\"\n }\n }\n },\n \"FR\": {\n \"names\": {\n \"fr\": \"France\",\n \"en\": \"France\"\n },\n \"dayoff\": \"sunday\",\n \"zones\": [\n \"Europe/Paris\"\n ],\n \"langs\": [\n \"fr\"\n ],\n \"days\": {\n \"01-01\": {\n \"_name\": \"01-01\"\n },\n \"easter 1\": {\n \"_name\": \"easter 1\"\n },\n \"05-01\": {\n \"_name\": \"05-01\"\n },\n \"05-08\": {\n \"name\": {\n \"fr\": \"F\u00EAte de la Victoire 1945\",\n \"en\": \"Victory Day\"\n }\n },\n \"easter 39\": {\n \"_name\": \"easter 39\"\n },\n \"easter 49\": {\n \"_name\": \"easter 49\",\n \"type\": \"observance\"\n },\n \"easter 50\": {\n \"_name\": \"easter 50\"\n },\n \"sunday before 06-01\": {\n \"_name\": \"Mothers Day\",\n \"type\": \"observance\"\n },\n \"07-14\": {\n \"name\": {\n \"fr\": \"F\u00EAte Nationale de la France\",\n \"en\": \"Bastille Day\"\n }\n },\n \"08-15\": {\n \"_name\": \"08-15\"\n },\n \"11-01\": {\n \"_name\": \"11-01\"\n },\n \"11-11\": {\n \"name\": {\n \"fr\": \"Armistice 1918\",\n \"en\": \"Armistice Day\"\n }\n },\n \"12-25\": {\n \"_name\": \"12-25\"\n }\n },\n \"states\": {\n \"57\": {\n \"name\": \"D\u00E9partement Moselle\",\n \"days\": {\n \"easter -2\": {\n \"_name\": \"easter -2\"\n },\n \"12-26\": {\n \"_name\": \"12-26\"\n }\n }\n },\n \"67\": {\n \"name\": \"D\u00E9partement Bas-Rhin\",\n \"days\": {\n \"easter -2\": {\n \"_name\": \"easter -2\"\n },\n \"12-26\": {\n \"_name\": \"12-26\"\n }\n }\n },\n \"68\": {\n \"name\": \"D\u00E9partement Haut-Rhin\",\n \"days\": {\n \"easter -2\": {\n \"_name\": \"easter -2\"\n },\n \"12-26\": {\n \"_name\": \"12-26\"\n }\n }\n },\n \"YT\": {\n \"name\": \"D\u00E9partement et r\u00E9gion d'outre-mer Mayotte\",\n \"zones\": [\n \"Africa/Nairobi\"\n ],\n \"_days\": \"YT\"\n },\n \"MQ\": {\n \"name\": \"D\u00E9partement et r\u00E9gion d'outre-mer Martinique\",\n \"zones\": [\n \"America/Martinique\"\n ],\n \"_days\": \"MQ\"\n },\n \"GP\": {\n \"name\": \"D\u00E9partement et r\u00E9gion d'outre-mer Guadeloupe\",\n \"zones\": [\n \"America/Port_of_Spain\"\n ],\n \"_days\": \"GP\"\n },\n \"GF\": {\n \"name\": \"D\u00E9partement et r\u00E9gion d'outre-mer Guyane\",\n \"zones\": [\n \"America/Cayenne\"\n ],\n \"_days\": \"GF\"\n },\n \"RE\": {\n \"name\": \"D\u00E9partement et r\u00E9gion d'outre-mer La R\u00E9union\",\n \"zones\": [\n \"Indian/Reunion\"\n ],\n \"_days\": \"RE\"\n },\n \"MF\": {\n \"name\": \"D\u00E9partement et r\u00E9gion d'outre-mer Saint Martin\",\n \"zones\": [\n \"America/Marigot\"\n ],\n \"_days\": \"MF\"\n },\n \"BL\": {\n \"name\": \"D\u00E9partement et r\u00E9gion d'outre-mer Saint Barth\u00E9lemy\",\n \"zones\": [\n \"America/St_Barthelemy\"\n ],\n \"_days\": \"BL\"\n }\n }\n },\n \"GA\": {\n \"names\": {\n \"fr\": \"Gabon\",\n \"en\": \"Gabon\"\n },\n \"dayoff\": \"sunday\",\n \"langs\": [\n \"fr\"\n ],\n \"zones\": [\n \"Africa/Lagos\"\n ],\n \"days\": {\n \"01-01\": {\n \"_name\": \"01-01\"\n },\n \"easter 1\": {\n \"_name\": \"easter 1\"\n },\n \"04-17\": {\n \"name\": {\n \"fr\": \"Journ\u00E9e des droits de la femme\",\n \"en\": \"Women's Day\"\n }\n },\n \"05-01\": {\n \"_name\": \"05-01\"\n },\n \"easter 50\": {\n \"_name\": \"easter 50\"\n },\n \"08-15\": {\n \"_name\": \"08-15\"\n },\n \"08-16 P2D\": {\n \"_name\": \"Independence Day\"\n },\n \"11-01\": {\n \"_name\": \"11-01\"\n },\n \"12-25\": {\n \"_name\": \"12-25\"\n },\n \"1 Shawwal\": {\n \"_name\": \"1 Shawwal\"\n },\n \"10 Dhu al-Hijjah\": {\n \"_name\": \"10 Dhu al-Hijjah\"\n }\n }\n },\n \"GB\": {\n \"names\": {\n \"en\": \"United Kingdom\"\n },\n \"dayoff\": \"sunday\",\n \"zones\": [\n \"Europe/London\"\n ],\n \"langs\": [\n \"en\"\n ],\n \"days\": {\n \"01-01\": {\n \"_name\": \"01-01\"\n },\n \"substitutes 01-01 if sunday then next monday\": {\n \"substitute\": true,\n \"_name\": \"01-01\"\n },\n \"substitutes 01-01 if saturday then next monday\": {\n \"substitute\": true,\n \"_name\": \"01-01\"\n },\n \"easter -21\": {\n \"_name\": \"Mothers Day\",\n \"type\": \"observance\"\n },\n \"easter -2\": {\n \"_name\": \"easter -2\"\n },\n \"easter\": {\n \"_name\": \"easter\",\n \"type\": \"observance\"\n },\n \"easter 1\": {\n \"_name\": \"easter 1\"\n },\n \"1st monday in May\": {\n \"name\": {\n \"en\": \"Early May bank holiday\"\n },\n \"disable\": [\n \"2020-05-04\"\n ]\n },\n \"1st monday before 06-01\": {\n \"name\": {\n \"en\": \"Spring bank holiday\"\n },\n \"disable\": [\n \"2022-05-30\"\n ],\n \"enable\": [\n \"2022-06-02\"\n ]\n },\n \"12-25\": {\n \"_name\": \"12-25\"\n },\n \"substitutes 12-25 if saturday then next monday if sunday then next tuesday\": {\n \"substitute\": true,\n \"_name\": \"12-25\"\n },\n \"12-26\": {\n \"_name\": \"12-26\"\n },\n \"substitutes 12-26 if saturday then next monday if sunday then next tuesday\": {\n \"substitute\": true,\n \"_name\": \"12-26\"\n },\n \"2012-06-05\": {\n \"name\": {\n \"en\": \"Queen\u2019s Diamond Jubilee\"\n }\n },\n \"2020-05-08\": {\n \"name\": {\n \"en\": \"Early May bank holiday (VE day)\"\n }\n },\n \"2022-06-03\": {\n \"name\": {\n \"en\": \"Queen\u2019s Platinum Jubilee\"\n }\n },\n \"2022-09-19\": {\n \"name\": {\n \"en\": \"Queen Elizabeth's Funeral Day\"\n }\n },\n \"3rd sunday in June\": {\n \"_name\": \"Fathers Day\",\n \"type\": \"observance\"\n }\n },\n \"states\": {\n \"ALD\": {\n \"name\": \"Alderney\",\n \"zones\": [\n \"Europe/Guernsey\"\n ],\n \"days\": {\n \"12-15\": {\n \"name\": {\n \"en\": \"Homecoming Day\"\n }\n }\n }\n },\n \"ENG\": {\n \"name\": \"England\",\n \"days\": {\n \"1st monday before 09-01\": {\n \"name\": {\n \"en\": \"Summer bank holiday\"\n }\n }\n }\n },\n \"NIR\": {\n \"name\": \"Northern Ireland\",\n \"zones\": [\n \"Europe/Belfast\"\n ],\n \"days\": {\n \"03-17\": {\n \"name\": {\n \"en\": \"St Patrick's Day\"\n }\n },\n \"substitutes 03-17 if saturday then next monday\": {\n \"substitute\": true,\n \"name\": {\n \"en\": \"St Patrick's Day\"\n }\n },\n \"substitutes 03-17 if sunday then next monday\": {\n \"substitute\": true,\n \"name\": {\n \"en\": \"St Patrick's Day\"\n }\n },\n \"07-12\": {\n \"name\": {\n \"en\": \"Battle of the Boyne, Orangemen\u2019s Day\"\n }\n },\n \"substitutes 07-12 if saturday then next monday\": {\n \"substitute\": true,\n \"name\": {\n \"en\": \"Battle of the Boyne\"\n }\n },\n \"substitutes 07-12 if sunday then next monday\": {\n \"substitute\": true,\n \"name\": {\n \"en\": \"Battle of the Boyne\"\n }\n },\n \"1st monday before 09-01\": {\n \"name\": {\n \"en\": \"Summer bank holiday\"\n }\n }\n }\n },\n \"SCT\": {\n \"name\": \"Scotland\",\n \"days\": {\n \"substitutes 01-01 if sunday then next monday\": false,\n \"substitutes 01-01 if saturday then next monday\": false,\n \"substitutes 01-01 if saturday then next tuesday\": {\n \"substitute\": true,\n \"_name\": \"01-01\"\n },\n \"substitutes 01-01 if sunday then next tuesday\": {\n \"substitute\": true,\n \"_name\": \"01-01\"\n },\n \"01-02\": {\n \"name\": {\n \"en\": \"Januar 2nd\"\n }\n },\n \"substitutes 01-02 if saturday then next monday\": {\n \"substitute\": true,\n \"name\": {\n \"en\": \"Januar 2nd\"\n }\n },\n \"substitutes 01-02 if sunday then next monday\": {\n \"substitute\": true,\n \"name\": {\n \"en\": \"Januar 2nd\"\n }\n },\n \"easter 1\": {\n \"_name\": \"easter 1\"\n },\n \"1st monday in August\": {\n \"name\": {\n \"en\": \"Summer bank holiday\"\n }\n },\n \"11-30\": {\n \"name\": {\n \"en\": \"St Andrew\u2019s Day\"\n }\n }\n }\n },\n \"WLS\": {\n \"name\": \"Wales\",\n \"days\": {\n \"1st monday before 09-01\": {\n \"name\": {\n \"en\": \"Summer bank holiday\"\n }\n }\n },\n \"regions\": {}\n }\n }\n },\n \"GD\": {\n \"names\": {\n \"en\": \"Grenada\"\n },\n \"dayoff\": \"sunday\",\n \"langs\": [\n \"en\"\n ],\n \"zones\": [\n \"America/Port_of_Spain\"\n ],\n \"days\": {\n \"01-01\": {\n \"_name\": \"01-01\"\n },\n \"02-07\": {\n \"_name\": \"Independence Day\"\n },\n \"easter -2\": {\n \"_name\": \"easter -2\"\n },\n \"easter\": {\n \"_name\": \"easter\",\n \"type\": \"observance\"\n },\n \"easter 1\": {\n \"_name\": \"easter 1\"\n },\n \"04-24 P3D\": {\n \"name\": {\n \"en\": \"Carriacou Maroon and String Band Music Festival\"\n },\n \"type\": \"observance\"\n },\n \"05-01\": {\n \"_name\": \"05-01\"\n },\n \"easter 49\": {\n \"_name\": \"easter 49\",\n \"type\": \"observance\"\n },\n \"easter 50\": {\n \"_name\": \"easter 50\"\n },\n \"easter 60\": {\n \"_name\": \"easter 60\"\n },\n \"1st monday in August\": {\n \"name\": {\n \"en\": \"Emancipation Day\"\n }\n },\n \"2nd monday in August\": {\n \"name\": {\n \"en\": \"Carnival Monday\"\n }\n },\n \"tuesday after 2nd monday in August\": {\n \"name\": {\n \"en\": \"Carnival Tuesday\"\n }\n },\n \"09-01\": {\n \"name\": {\n \"en\": \"Kirani Day\"\n },\n \"type\": \"observance\"\n },\n \"10-15 P5D\": {\n \"name\": {\n \"en\": \"Aunty Tek Spice Word Festival\"\n },\n \"type\": \"observance\"\n },\n \"10-25\": {\n \"name\": {\n \"en\": \"Thanksgiving Day\"\n }\n },\n \"12-04 P3D\": {\n \"name\": {\n \"en\": \"Camerhogne Folk Festival\"\n },\n \"type\": \"observance\"\n },\n \"12-25\": {\n \"_name\": \"12-25\"\n },\n \"12-26\": {\n \"_name\": \"12-26\"\n }\n }\n },\n \"GE\": {\n \"names\": {\n \"ge\": \"\u10E1\u10D0\u10E5\u10D0\u10E0\u10D7\u10D5\u10D4\u10DA\u10DD\",\n \"en\": \"Georgia\"\n },\n \"langs\": [\n \"ge\"\n ],\n \"zones\": [\n \"Asia/Tbilisi\"\n ],\n \"dayoff\": \"sunday\",\n \"days\": {\n \"01-01\": {\n \"_name\": \"01-01\"\n },\n \"01-02\": {\n \"name\": {\n \"ge\": \"\u10D1\u10D4\u10D3\u10DD\u10D1\u10D0\",\n \"en\": \"Bedoba\"\n }\n },\n \"01-07\": {\n \"name\": {\n \"ge\": \"\u10E8\u10DD\u10D1\u10D0\",\n \"en\": \"Orthodox Christmas\"\n }\n },\n \"01-19\": {\n \"name\": {\n \"ge\": \"\u10DC\u10D0\u10D7\u10DA\u10D8\u10E1\u10E6\u10D4\u10D1\u10D0\",\n \"en\": \"Orthodox Epiphany\"\n }\n },\n \"03-03\": {\n \"name\": {\n \"ge\": \"\u10D3\u10D4\u10D3\u10D8\u10E1 \u10D3\u10E6\u10D4\",\n \"en\": \"Mother's Day\"\n }\n },\n \"03-08\": {\n \"_name\": \"03-08\"\n },\n \"04-09\": {\n \"name\": {\n \"ge\": \"\u10D4\u10E0\u10DD\u10D5\u10DC\u10E3\u10DA\u10D8 \u10D4\u10E0\u10D7\u10D8\u10D0\u10DC\u10DD\u10D1\u10D8\u10E1 \u10D3\u10E6\u10D4\",\n \"en\": \"National Unity Day\"\n }\n },\n \"orthodox -2\": {\n \"_name\": \"easter -2\"\n },\n \"orthodox -1\": {\n \"_name\": \"easter -1\"\n },\n \"orthodox\": {\n \"_name\": \"easter\"\n },\n \"orthodox 1\": {\n \"_name\": \"easter 1\"\n },\n \"05-09\": {\n \"name\": {\n \"ge\": \"\u10E4\u10D0\u10E8\u10D8\u10D6\u10DB\u10D6\u10D4 \u10D2\u10D0\u10DB\u10D0\u10E0\u10EF\u10D5\u10D4\u10D1\u10D8\u10E1 \u10D3\u10E6\u10D4\",\n \"en\": \"Victory Day\"\n }\n },\n \"05-12\": {\n \"name\": {\n \"ge\": \"\u10EC\u10DB\u10D8\u10DC\u10D3\u10D0 \u10D0\u10DC\u10D3\u10E0\u10D8\u10D0 \u10DE\u10D8\u10E0\u10D5\u10D4\u10DA\u10EC\u10DD\u10D3\u10D4\u10D1\u10E3\u10DA\u10D8\u10E1 \u10EE\u10E1\u10D4\u10DC\u10D4\u10D1\u10D8\u10E1 \u10D3\u10E6\u10D4\",\n \"en\": \"Saint Andrew the First-Called Day\"\n }\n },\n \"05-26\": {\n \"name\": {\n \"ge\": \"\u10D3\u10D0\u10DB\u10DD\u10E3\u10D9\u10D8\u10D3\u10D4\u10D1\u10DA\u10DD\u10D1\u10D8\u10E1 \u10D3\u10E6\u10D4\",\n \"en\": \"Independence Day\"\n }\n },\n \"08-28\": {\n \"name\": {\n \"ge\": \"\u10DB\u10D0\u10E0\u10D8\u10D0\u10DB\u10DD\u10D1\u10D0\",\n \"en\": \"Saint Mary's Day\"\n }\n },\n \"10-14\": {\n \"name\": {\n \"ge\": \"\u10E1\u10D5\u10D4\u10E2\u10D8\u10EA\u10EE\u10DD\u10D5\u10DA\u10DD\u10D1\u10D0\",\n \"en\": \"Svetitskhovloba\"\n }\n },\n \"11-23\": {\n \"name\": {\n \"ge\": \"\u10D2\u10D8\u10DD\u10E0\u10D2\u10DD\u10D1\u10D0\",\n \"en\": \"Saint George's Day\"\n }\n }\n }\n },\n \"GF\": {\n \"names\": {\n \"fr\": \"Guyane\",\n \"en\": \"French Guiana\"\n },\n \"langs\": [\n \"fr\"\n ],\n \"zones\": [\n \"America/Cayenne\"\n ],\n \"dayoff\": \"sunday\",\n \"_days\": \"FR\",\n \"days\": {\n \"06-10\": {\n \"_name\": \"Abolition of Slavery\"\n }\n }\n },\n \"GG\": {\n \"names\": {\n \"en\": \"Guernsey\"\n },\n \"dayoff\": \"sunday\",\n \"zones\": [\n \"Europe/Guernsey\"\n ],\n \"langs\": [\n \"en\"\n ],\n \"_days\": [\n \"GB\"\n ],\n \"days\": {\n \"05-09\": {\n \"name\": {\n \"en\": \"Liberation Day\"\n }\n }\n }\n },\n \"GH\": {\n \"names\": {\n \"en\": \"Ghana\"\n },\n \"langs\": [\n \"en\"\n ],\n \"zones\": [\n \"Africa/Accra\"\n ],\n \"dayoff\": \"\",\n \"days\": {\n \"01-01 and if Saturday, Sunday then next Monday\": {\n \"substitute\": true,\n \"_name\": \"01-01\"\n },\n \"01-07 since 2019\": {\n \"_name\": \"Constitution Day\"\n },\n \"03-06 and if Saturday, Sunday then next Monday\": {\n \"substitute\": true,\n \"_name\": \"Independence Day\"\n },\n \"easter -2\": {\n \"_name\": \"easter -2\"\n },\n \"easter\": {\n \"_name\": \"easter\",\n \"type\": \"observance\"\n },\n \"easter 1\": {\n \"_name\": \"easter 1\"\n },\n \"05-01 and if Saturday, Sunday then next Monday\": {\n \"substitute\": true,\n \"_name\": \"05-01\"\n },\n \"08-04 and if Saturday, Sunday then next Monday\": {\n \"substitute\": true,\n \"name\": {\n \"en\": \"Founders Day\"\n }\n },\n \"09-21 and if Saturday, Sunday then next Monday\": {\n \"substitute\": true,\n \"name\": {\n \"en\": \"Kwame Nkrumah Memorial Day\"\n }\n },\n \"1st Friday in December since 1988\": {\n \"name\": {\n \"en\": \"Farmers Day\"\n }\n },\n \"12-25 and if Saturday then next Monday if Sunday then next Tuesday\": {\n \"substitute\": true,\n \"_name\": \"12-25\"\n },\n \"12-26 and if Saturday then next Monday if Sunday then next Tuesday\": {\n \"substitute\": true,\n \"_name\": \"12-26\"\n },\n \"1 Shawwal and if Saturday, Sunday then next Monday\": {\n \"substitute\": true,\n \"_name\": \"1 Shawwal\"\n },\n \"10 Dhu al-Hijjah and if Saturday, Sunday then next Monday\": {\n \"substitute\": true,\n \"_name\": \"10 Dhu al-Hijjah\"\n }\n }\n },\n \"GI\": {\n \"names\": {\n \"en\": \"Gibraltar\"\n },\n \"langs\": [\n \"en\"\n ],\n \"zones\": [\n \"Europe/Gibraltar\"\n ],\n \"dayoff\": \"sunday\",\n \"_days\": \"GB\",\n \"days\": {\n \"2nd monday in March\": {\n \"name\": {\n \"en\": \"Commonwealth Day\"\n }\n },\n \"easter\": {\n \"_name\": \"easter\",\n \"type\": \"observance\"\n },\n \"04-28\": {\n \"name\": {\n \"en\": \"Workers Memorial Day\"\n },\n \"disable\": [\n \"2015-04-28\"\n ],\n \"enable\": [\n \"2015-04-27\"\n ]\n },\n \"05-01 if sunday, saturday then next monday\": {\n \"substitute\": true,\n \"name\": {\n \"en\": \"May Day\"\n }\n },\n \"1st monday in May\": false,\n \"2020-05-08\": {\n \"name\": {\n \"en\": \"Victory in Europe Day (VE Day)\"\n }\n },\n \"monday before 06-20\": {\n \"name\": {\n \"en\": \"Queen's Birthday\"\n }\n },\n \"monday before September\": {\n \"name\": {\n \"en\": \"Late Summer Bank Holiday\"\n }\n },\n \"09-10\": {\n \"name\": {\n \"en\": \"Gibraltar National Day\"\n },\n \"active\": [\n {\n \"to\": 2015\n }\n ]\n },\n \"09-10 and if sunday, saturday then previous monday\": {\n \"substitute\": true,\n \"name\": {\n \"en\": \"Gibraltar National Day\"\n },\n \"active\": [\n {\n \"from\": 2015\n }\n ]\n }\n }\n },\n \"GL\": {\n \"names\": {\n \"kl\": \"Kalaallit Nunaat\",\n \"da\": \"Gr\u00F8nland\",\n \"en\": \"Greenland\"\n },\n \"langs\": [\n \"kl\",\n \"da\"\n ],\n \"zones\": [\n \"America/Godthab\",\n \"America/Danmarkshavn\",\n \"America/Scoresbysund\",\n \"America/Thule\"\n ],\n \"dayoff\": \"sunday\",\n \"days\": {\n \"01-01\": {\n \"_name\": \"01-01\"\n },\n \"01-06\": {\n \"_name\": \"01-06\"\n },\n \"easter -3\": {\n \"_name\": \"easter -3\"\n },\n \"easter -2\": {\n \"_name\": \"easter -2\"\n },\n \"easter\": {\n \"_name\": \"easter\"\n },\n \"easter 1\": {\n \"_name\": \"easter 1\"\n },\n \"easter 26\": {\n \"name\": {\n \"kl\": \"tussiarfissuaq\",\n \"da\": \"Store Bededag\",\n \"en\": \"Prayer Day\"\n }\n },\n \"easter 39\": {\n \"_name\": \"easter 39\"\n },\n \"06-21\": {\n \"name\": {\n \"kl\": \"ullortuneq\",\n \"da\": \"Nationaldag\",\n \"en\": \"National Day\"\n }\n },\n \"easter 49\": {\n \"_name\": \"easter 49\"\n },\n \"easter 50\": {\n \"_name\": \"easter 50\"\n },\n \"12-24\": {\n \"_name\": \"12-24\"\n },\n \"12-25\": {\n \"_name\": \"12-25\"\n },\n \"12-26\": {\n \"_name\": \"12-26\"\n }\n }\n },\n \"GM\": {\n \"names\": {\n \"en\": \"The Gambia\"\n },\n \"langs\": [\n \"en\"\n ],\n \"zones\": [\n \"Africa/Abidjan\"\n ],\n \"dayoff\": \"\",\n \"days\": {\n \"01-01\": {\n \"_name\": \"01-01\"\n },\n \"02-18\": {\n \"_name\": \"Independence Day\"\n },\n \"easter -2\": {\n \"_name\": \"easter -2\"\n },\n \"easter\": {\n \"_name\": \"easter\",\n \"type\": \"observance\"\n },\n \"easter 1\": {\n \"_name\": \"easter 1\"\n },\n \"05-01\": {\n \"_name\": \"05-01\"\n },\n \"05-25\": {\n \"name\": {\n \"en\": \"Africa Day\"\n }\n },\n \"07-22\": {\n \"name\": {\n \"en\": \"Revolution Day\"\n }\n },\n \"08-15\": {\n \"_name\": \"08-15\"\n },\n \"12-25\": {\n \"_name\": \"12-25\"\n },\n \"10 Muharram\": {\n \"_name\": \"10 Muharram\"\n },\n \"12 Rabi al-awwal\": {\n \"_name\": \"12 Rabi al-awwal\"\n },\n \"23 Ramadan\": {\n \"_name\": \"23 Ramadan\"\n },\n \"1 Shawwal\": {\n \"_name\": \"1 Shawwal\",\n \"name\": {\n \"en\": \"Korit\u00E9\"\n }\n },\n \"10 Dhu al-Hijjah\": {\n \"_name\": \"10 Dhu al-Hijjah\",\n \"name\": {\n \"en\": \"Tabaski\"\n }\n }\n }\n },\n \"GN\": {\n \"names\": {\n \"fr\": \"Guin\u00E9e\",\n \"en\": \"Guinea\"\n },\n \"langs\": [\n \"fr\"\n ],\n \"zones\": [\n \"Africa/Abidjan\"\n ],\n \"dayoff\": \"sunday\",\n \"days\": {\n \"01-01\": {\n \"_name\": \"01-01\"\n },\n \"easter 1\": {\n \"_name\": \"easter 1\"\n },\n \"04-03\": {\n \"name\": {\n \"fr\": \"F\u00EAte Nationale de la deuxi\u00E8me R\u00E9publique\",\n \"en\": \"National Holiday\"\n }\n },\n \"05-01\": {\n \"_name\": \"05-01\"\n },\n \"05-25\": {\n \"name\": {\n \"fr\": \"Anniversaire de l'Organisation de l'unit\u00E9 africaine (OUA)\",\n \"en\": \"Africa Day\"\n }\n },\n \"27 Ramadan\": {\n \"_name\": \"27 Ramadan\"\n },\n \"1 Shawwal\": {\n \"_name\": \"1 Shawwal\"\n },\n \"10 Dhu al-Hijjah\": {\n \"_name\": \"10 Dhu al-Hijjah\"\n },\n \"08-15\": {\n \"_name\": \"08-15\"\n },\n \"10-02\": {\n \"_name\": \"Independence Day\"\n },\n \"12-25\": {\n \"_name\": \"12-25\"\n },\n \"12 Rabi al-awwal\": {\n \"_name\": \"12 Rabi al-awwal\"\n }\n }\n },\n \"GP\": {\n \"names\": {\n \"fr\": \"Guadeloupe\",\n \"en\": \"Guadeloupe\"\n },\n \"langs\": [\n \"fr\"\n ],\n \"zones\": [\n \"America/Port_of_Spain\"\n ],\n \"dayoff\": \"sunday\",\n \"_days\": \"FR\",\n \"days\": {\n \"easter 49\": false,\n \"easter -2\": {\n \"_name\": \"easter -2\"\n },\n \"05-27\": {\n \"_name\": \"Abolition of Slavery\"\n },\n \"07-21\": {\n \"name\": {\n \"fr\": \"Jour de Victor Shoelcher\",\n \"en\": \"Victor Shoelcher Day\"\n }\n }\n }\n },\n \"GQ\": {\n \"names\": {\n \"es\": \"Rep\u00FAblica de Guinea Ecuatorial\",\n \"fr\": \"R\u00E9publique de Guin\u00E9e \u00E9quatoriale\",\n \"pt\": \"Rep\u00FAblica da Guin\u00E9 Equatorial\",\n \"en\": \"Republic of Equatorial Guinea\"\n },\n \"dayoff\": \"sunday\",\n \"weekend\": [\n \"saturday\",\n \"sunday\"\n ],\n \"langs\": [\n \"es\",\n \"fr\",\n \"pt\"\n ],\n \"zones\": [\n \"Africa/Lagos\"\n ],\n \"days\": {\n \"01-01 and if sunday then next monday\": {\n \"substitute\": true,\n \"_name\": \"01-01\"\n },\n \"easter -2\": {\n \"_name\": \"easter -2\"\n },\n \"05-01 and if sunday then next monday\": {\n \"substitute\": true,\n \"_name\": \"05-01\"\n },\n \"easter 60\": {\n \"_name\": \"easter 60\"\n },\n \"06-05 and if sunday then next monday\": {\n \"substitute\": true,\n \"name\": {\n \"es\": \"Natalicio de Teodoro Obiang\",\n \"en\": \"President's Day\"\n }\n },\n \"08-03 and if sunday then next monday\": {\n \"substitute\": true,\n \"name\": {\n \"es\": \"D\u00EDa del Golpe de Libertad\",\n \"en\": \"Armed Forces Day\"\n }\n },\n \"08-15 and if sunday then next monday\": {\n \"substitute\": true,\n \"_name\": \"Constitution Day\"\n },\n \"10-12 and if sunday then next monday\": {\n \"substitute\": true,\n \"_name\": \"Independence Day\"\n },\n \"12-08 and if sunday then next monday\": {\n \"substitute\": true,\n \"_name\": \"12-08\"\n },\n \"12-25 and if sunday then next monday\": {\n \"substitute\": true,\n \"_name\": \"12-25\"\n }\n }\n },\n \"GR\": {\n \"names\": {\n \"el\": \"\u0395\u03BB\u03BB\u03AC\u03B4\u03B1\",\n \"en\": \"Greece\"\n },\n \"dayoff\": \"sunday\",\n \"zones\": [\n \"Europe/Athens\"\n ],\n \"langs\": [\n \"el\"\n ],\n \"days\": {\n \"01-01\": {\n \"_name\": \"01-01\"\n },\n \"01-06\": {\n \"_name\": \"01-06\"\n },\n \"orthodox -48\": {\n \"name\": {\n \"el\": \"\u039A\u03B1\u03B8\u03B1\u03C1\u03AC \u0394\u03B5\u03C5\u03C4\u03AD\u03C1\u03B1\",\n \"en\": \"Ash Sunday\"\n }\n },\n \"03-25\": {\n \"name\": {\n \"el\": \"\u0395\u03C5\u03B1\u03B3\u03B3\u03B5\u03BB\u03B9\u03C3\u03BC\u03CC\u03C2, \u0395\u03B8\u03BD\u03B9\u03BA\u03AE \u0395\u03BF\u03C1\u03C4\u03AE\",\n \"en\": \"Annunciation, Anniversary of 1821 Revolution\"\n }\n },\n \"orthodox -2\": {\n \"_name\": \"easter -2\"\n },\n \"orthodox\": {\n \"_name\": \"easter\"\n },\n \"orthodox 1\": {\n \"_name\": \"easter 1\"\n },\n \"05-01\": {\n \"_name\": \"05-01\"\n },\n \"orthodox 49\": {\n \"_name\": \"easter 49\"\n },\n \"orthodox 50\": {\n \"_name\": \"easter 50\"\n },\n \"2nd sunday in May\": {\n \"_name\": \"Mothers Day\",\n \"type\": \"observance\"\n },\n \"08-15\": {\n \"_name\": \"08-15\"\n },\n \"10-28\": {\n \"_name\": \"National Holiday\",\n \"name\": {\n \"el\": \"\u0395\u03C0\u03AD\u03C4\u03B5\u03B9\u03BF\u03C2 \u03C4\u03BF\u03C5 \u038C\u03C7\u03B9\"\n }\n },\n \"12-25\": {\n \"_name\": \"12-25\"\n },\n \"12-26\": {\n \"_name\": \"12-26\"\n }\n }\n },\n \"GT\": {\n \"names\": {\n \"es\": \"Guatemala\",\n \"en\": \"Guatemala\"\n },\n \"dayoff\": \"sunday\",\n \"langs\": [\n \"es\"\n ],\n \"zones\": [\n \"America/Guatemala\"\n ],\n \"days\": {\n \"01-01\": {\n \"_name\": \"01-01\"\n },\n \"easter -3\": {\n \"_name\": \"easter -3\"\n },\n \"easter -2\": {\n \"_name\": \"easter -2\"\n },\n \"easter -1\": {\n \"_name\": \"easter -1\"\n },\n \"easter\": {\n \"_name\": \"easter\",\n \"type\": \"observance\"\n },\n \"05-01\": {\n \"_name\": \"05-01\"\n },\n \"06-30 if tuesday then previous monday if wednesday,thursday then next friday\": {\n \"name\": {\n \"es\": \"D\u00EDa de las Fuerzas Armadas\",\n \"en\": \"Army Day\"\n }\n },\n \"09-15\": {\n \"_name\": \"Independence Day\"\n },\n \"10-20\": {\n \"_name\": \"Revolution Day\"\n },\n \"11-01\": {\n \"_name\": \"11-01\"\n },\n \"12-24 12:00\": {\n \"_name\": \"12-24\"\n },\n \"12-25\": {\n \"_name\": \"12-25\"\n },\n \"12-31 12:00\": {\n \"_name\": \"12-31\"\n }\n }\n },\n \"GU\": {\n \"names\": {\n \"en\": \"Guam\"\n },\n \"dayoff\": \"sunday\",\n \"langs\": [\n \"en-us\",\n \"en\"\n ],\n \"zones\": [\n \"Pacific/Guam\"\n ],\n \"_days\": [\n \"US\"\n ],\n \"days\": {\n \"3rd monday in February\": false,\n \"03-17\": false,\n \"1st monday in March\": {\n \"name\": {\n \"en\": \"Guam History and Chamorro Heritage Day\"\n }\n },\n \"easter -2\": {\n \"_name\": \"easter -2\",\n \"type\": \"observance\"\n },\n \"07-21 if sunday then next monday\": {\n \"name\": {\n \"en\": \"Liberation Day\"\n }\n },\n \"11-02\": {\n \"_name\": \"11-02\"\n },\n \"12-08 if sunday then next monday\": {\n \"name\": {\n \"en\": \"Our Lady of Camarin Day\"\n }\n }\n }\n },\n \"GW\": {\n \"names\": {\n \"pt\": \"Guin\u00E9-Bissau\",\n \"en\": \"Guinea-Bissau\"\n },\n \"langs\": [\n \"pt\"\n ],\n \"zones\": [\n \"Africa/Bissau\"\n ],\n \"dayoff\": \"\",\n \"days\": {\n \"01-01\": {\n \"_name\": \"01-01\"\n },\n \"01-20\": {\n \"name\": {\n \"pt\": \"Dia dos her\u00F3is\",\n \"en\": \"Heroes Day\"\n }\n },\n \"03-08\": {\n \"_name\": \"03-08\"\n },\n \"05-01\": {\n \"_name\": \"05-01\"\n },\n \"08-03\": {\n \"name\": {\n \"pt\": \"Pidjiguiti Day\"\n }\n },\n \"09-24\": {\n \"_name\": \"Independence Day\"\n },\n \"11-14\": {\n \"name\": {\n \"pt\": \"Dia do Movimento de Reajustamento\",\n \"en\": \"Readjustment Movement Day\"\n }\n },\n \"12-25\": {\n \"_name\": \"12-25\"\n },\n \"1 Shawwal\": {\n \"_name\": \"1 Shawwal\"\n },\n \"10 Dhu al-Hijjah\": {\n \"_name\": \"10 Dhu al-Hijjah\"\n }\n }\n },\n \"GY\": {\n \"names\": {\n \"en\": \"Guyana\"\n },\n \"coord\": {\n \"lat\": 6.8045,\n \"lng\": -58.1553\n },\n \"dayoff\": \"sunday\",\n \"langs\": [\n \"en\"\n ],\n \"zones\": [\n \"America/Guyana\"\n ],\n \"days\": {\n \"01-01\": {\n \"_name\": \"01-01\"\n },\n \"02-23\": {\n \"name\": {\n \"en\": \"Republic Day\"\n }\n },\n \"easter -2\": {\n \"_name\": \"easter -2\"\n },\n \"easter 1\": {\n \"_name\": \"easter 1\"\n },\n \"05-01\": {\n \"_name\": \"05-01\"\n },\n \"05-05\": {\n \"name\": {\n \"en\": \"Arrival Day\"\n }\n },\n \"05-26\": {\n \"_name\": \"Independence Day\"\n },\n \"monday after 07-01\": {\n \"name\": {\n \"en\": \"CARICOM Day\"\n }\n },\n \"08-01\": {\n \"name\": {\n \"en\": \"Emancipation Day\"\n }\n },\n \"12-25\": {\n \"_name\": \"12-25\"\n },\n \"12-26\": {\n \"_name\": \"12-26\"\n },\n \"12 Rabi al-awwal\": {\n \"_name\": \"12 Rabi al-awwal\",\n \"name\": {\n \"en\": \"Youman Nabi\"\n },\n \"note\": \"tentative\",\n \"disable\": [\n \"2016-12-11\",\n \"2015-12-23\",\n \"2013-01-24\"\n ],\n \"enable\": [\n \"2016-12-12\",\n \"2015-12-24\",\n \"2013-01-23\"\n ]\n },\n \"10 Dhu al-Hijjah\": {\n \"_name\": \"10 Dhu al-Hijjah\",\n \"name\": {\n \"en\": \"Eid Ul Adha\"\n },\n \"note\": \"tentative\",\n \"disable\": [\n \"2015-09-23\"\n ],\n \"enable\": [\n \"2015-09-24\"\n ]\n },\n \"2015-03-05\": {\n \"name\": {\n \"en\": \"Phagwah\"\n }\n },\n \"2016-03-23\": {\n \"name\": {\n \"en\": \"Phagwah\"\n }\n },\n \"2017-03-12\": {\n \"name\": {\n \"en\": \"Phagwah\"\n }\n },\n \"2017-03-13\": {\n \"substitute\": true,\n \"name\": {\n \"en\": \"Phagwah\"\n }\n },\n \"2018-03-02\": {\n \"name\": {\n \"en\": \"Phagwah\"\n }\n },\n \"2019-03-21\": {\n \"name\": {\n \"en\": \"Phagwah\"\n }\n },\n \"2020-03-10\": {\n \"name\": {\n \"en\": \"Phagwah\"\n }\n },\n \"2021-03-29\": {\n \"name\": {\n \"en\": \"Phagwah\"\n }\n },\n \"2022-03-18\": {\n \"name\": {\n \"en\": \"Phagwah\"\n }\n },\n \"2023-03-07\": {\n \"name\": {\n \"en\": \"Phagwah\"\n }\n },\n \"2024-03-25\": {\n \"name\": {\n \"en\": \"Phagwah\"\n }\n },\n \"2015-11-11\": {\n \"name\": {\n \"en\": \"Deepavali\"\n }\n },\n \"2017-10-18\": {\n \"name\": {\n \"en\": \"Deepavali\"\n }\n },\n \"2018-11-07\": {\n \"name\": {\n \"en\": \"Deepavali\"\n }\n },\n \"2019-10-27\": {\n \"name\": {\n \"en\": \"Deepavali\"\n }\n },\n \"2019-10-28\": {\n \"substitute\": true,\n \"name\": {\n \"en\": \"Deepavali\"\n }\n },\n \"2020-11-14\": {\n \"name\": {\n \"en\": \"Deepavali\"\n }\n },\n \"2021-11-04\": {\n \"name\": {\n \"en\": \"Deepavali\"\n }\n },\n \"2022-10-24\": {\n \"name\": {\n \"en\": \"Deepavali\"\n }\n },\n \"2023-11-12\": {\n \"name\": {\n \"en\": \"Deepavali\"\n }\n },\n \"2023-11-13\": {\n \"substitute\": true,\n \"name\": {\n \"en\": \"Deepavali\"\n }\n },\n \"2024-10-31\": {\n \"name\": {\n \"en\": \"Deepavali\"\n }\n }\n }\n },\n \"HK\": {\n \"names\": {\n \"zh\": \"\u9999\u6E2F\",\n \"en\": \"Hong Kong\"\n },\n \"langs\": [\n \"zh\",\n \"en\"\n ],\n \"zones\": [\n \"Asia/Hong_Kong\"\n ],\n \"dayoff\": \"sunday\",\n \"days\": {\n \"01-01 and if Sunday then next Monday\": {\n \"substitute\": true,\n \"_name\": \"01-01\",\n \"name\": {\n \"zh\": \"\u4E00\u6708\u4E00\u65E5\"\n }\n },\n \"chinese 01-0-01 and if Saturday then next Tuesday\": {\n \"name\": {\n \"en\": \"Lunar New Year\",\n \"zh\": \"\u8FB2\u66C6\u5E74\u521D\u4E00\"\n }\n },\n \"chinese 01-0-02 and if Saturday then next Monday\": {\n \"name\": {\n \"en\": \"The second day of the Lunar New Year\",\n \"zh\": \"\u8FB2\u66C6\u5E74\u521D\u4E8C\"\n }\n },\n \"chinese 01-0-03 and if Saturday then next Monday\": {\n \"name\": {\n \"en\": \"The third day of the Lunar New Year\",\n \"zh\": \"\u8FB2\u66C6\u5E74\u521D\u4E09\"\n }\n },\n \"chinese 5-01 solarterm and if Sunday then next Monday\": {\n \"name\": {\n \"en\": \"Qingming Festival\",\n \"zh\": \"\u6E05\u660E\u7BC0\"\n }\n },\n \"easter -2\": {\n \"_name\": \"easter -2\"\n },\n \"easter -1\": {\n \"_name\": \"easter -1\"\n },\n \"easter\": {\n \"_name\": \"easter\"\n },\n \"easter 1\": {\n \"_name\": \"easter 1\",\n \"disable\": [\n \"2021-04-05\"\n ],\n \"enable\": [\n \"2021-04-06\"\n ]\n },\n \"05-01 and if Sunday then next Monday\": {\n \"substitute\": true,\n \"_name\": \"05-01\"\n },\n \"chinese 04-0-08 and if Sunday then next Monday\": {\n \"name\": {\n \"en\": \"Birthday of the Buddha\",\n \"zh\": \"\u4F5B\u8A95\"\n }\n },\n \"chinese 05-0-05\": {\n \"name\": {\n \"en\": \"Dragon Boat Festival\",\n \"zh\": \"\u7AEF\u5348\u8282\"\n }\n },\n \"07-01 and if Sunday then next Monday\": {\n \"substitute\": true,\n \"name\": {\n \"en\": \"Hong Kong Special Administrative Region Establishment Day\",\n \"zh\": \"\u9999\u6E2F\u7279\u5225\u884C\u653F\u5340\u6210\u7ACB\u7D00\u5FF5\u65E5\"\n }\n },\n \"chinese 08-0-16 and if Sunday then next Monday if is public holiday then next day omit Saturday, Sunday\": {\n \"substitute\": true,\n \"name\": {\n \"en\": \"The day following the Chinese Mid-Autumn Festival\",\n \"zh\": \"\u4E2D\u79CB\u7BC0\u7FCC\u65E5\"\n }\n },\n \"10-01 and if Sunday then next Monday\": {\n \"substitute\": true,\n \"name\": {\n \"en\": \"National Day\",\n \"zh\": \"\u570B\u6176\u65E5\"\n }\n },\n \"chinese 09-0-09 and if Sunday then next Monday\": {\n \"substitute\": true,\n \"name\": {\n \"en\": \"Chung Yeung Festival\",\n \"zh\": \"\u91CD\u9633\u8282\"\n }\n },\n \"12-25 and if Sunday then next Monday\": {\n \"substitute\": true,\n \"_name\": \"12-25\"\n },\n \"12-26 and if Sunday then next Monday if Monday then next Tuesday\": {\n \"substitute\": true,\n \"name\": {\n \"en\": \"The first weekday after Christmas Day\",\n \"zh\": \"\u5723\u8BDE\u8282\u540E\u7684\u7B2C\u4E00\u4E2A\u5DE5\u4F5C\u65E5\"\n }\n }\n }\n },\n \"HN\": {\n \"names\": {\n \"es\": \"Honduras\",\n \"en\": \"Honduras\"\n },\n \"dayoff\": \"sunday\",\n \"langs\": [\n \"es\"\n ],\n \"zones\": [\n \"America/Tegucigalpa\"\n ],\n \"days\": {\n \"01-01\": {\n \"_name\": \"01-01\"\n },\n \"03-19\": {\n \"_name\": \"Fathers Day\",\n \"type\": \"observance\"\n },\n \"easter -3\": {\n \"_name\": \"easter -3\"\n },\n \"easter -2\": {\n \"_name\": \"easter -2\"\n },\n \"easter\": {\n \"_name\": \"easter\",\n \"type\": \"observance\"\n },\n \"04-14\": {\n \"name\": {\n \"es\": \"D\u00EDa de las Am\u00E9ricas\"\n }\n },\n \"05-01\": {\n \"_name\": \"05-01\"\n },\n \"2nd monday in May\": {\n \"_name\": \"Mothers Day\",\n \"type\": \"observance\"\n },\n \"06-11\": {\n \"name\": {\n \"en\": \"Pupil's Day\",\n \"es\": \"D\u00EDa del Estudiante\"\n },\n \"type\": \"observance\"\n },\n \"09-10\": {\n \"name\": {\n \"en\": \"Children's Day\",\n \"es\": \"D\u00EDa del Ni\u00F1o\"\n },\n \"type\": \"observance\"\n },\n \"09-15\": {\n \"_name\": \"Independence Day\"\n },\n \"09-17\": {\n \"name\": {\n \"en\": \"Teacher's Day\",\n \"es\": \"D\u00EDa del Maestro\"\n },\n \"type\": \"observance\"\n },\n \"10-03\": {\n \"name\": {\n \"en\": \"Soldier's Day\",\n \"es\": \"D\u00EDa del Soldado\"\n }\n },\n \"10-12\": {\n \"name\": {\n \"es\": \"D\u00EDa de la Raza\",\n \"en\": \"Columbus Day\"\n }\n },\n \"10-21\": {\n \"name\": {\n \"es\": \"D\u00EDa de las Fuerzas Armadas\",\n \"en\": \"Armed forces Day\"\n }\n },\n \"12-25\": {\n \"_name\": \"12-25\"\n }\n }\n },\n \"HR\": {\n \"names\": {\n \"hr\": \"Hrvatska\",\n \"en\": \"Croatia\"\n },\n \"langs\": [\n \"hr\"\n ],\n \"zones\": [\n \"Europe/Belgrade\"\n ],\n \"days\": {\n \"01-01\": {\n \"_name\": \"01-01\",\n \"type\": \"public\"\n },\n \"01-06\": {\n \"_name\": \"01-06\",\n \"type\": \"public\"\n },\n \"easter -47\": {\n \"_name\": \"easter -47\",\n \"type\": \"observance\"\n },\n \"easter\": {\n \"_name\": \"easter\",\n \"type\": \"public\"\n },\n \"easter 1\": {\n \"_name\": \"easter 1\",\n \"type\": \"public\"\n },\n \"easter 60\": {\n \"_name\": \"easter 60\",\n \"type\": \"public\"\n },\n \"03-08\": {\n \"_name\": \"03-08\",\n \"type\": \"observance\"\n },\n \"05-01\": {\n \"_name\": \"05-01\",\n \"type\": \"public\"\n },\n \"05-30\": {\n \"name\": {\n \"hr\": \"Dan dr\u017Eavnosti\",\n \"en\": \"National Day\"\n },\n \"type\": \"public\",\n \"active\": [\n {\n \"from\": \"2020-01-01\"\n }\n ]\n },\n \"2nd sunday in May\": {\n \"_name\": \"Mothers Day\",\n \"type\": \"observance\"\n },\n \"06-22\": {\n \"name\": {\n \"hr\": \"Dan antifa\u0161isti\u010Dke borbe\",\n \"en\": \"Anti-Fascist Struggle Day\"\n },\n \"type\": \"public\"\n },\n \"06-25 #1\": {\n \"name\": {\n \"hr\": \"Dan dr\u017Eavnosti\",\n \"en\": \"Statehood Day\"\n },\n \"type\": \"public\",\n \"active\": [\n {\n \"to\": \"2020-01-01\"\n }\n ]\n },\n \"06-25\": {\n \"name\": {\n \"hr\": \"Dan neovisnosti\",\n \"en\": \"Independence Day\"\n },\n \"type\": \"observance\",\n \"active\": [\n {\n \"from\": \"2020-01-01\"\n }\n ]\n },\n \"08-05\": {\n \"name\": {\n \"hr\": \"Dan pobjede i domovinske zahvalnosti i Dan hrvatskih branitelja\",\n \"en\": \"Victory and Homeland Thanksgiving Day and the Day of Croatian defenders\"\n },\n \"type\": \"public\"\n },\n \"08-15\": {\n \"_name\": \"08-15\",\n \"type\": \"public\"\n },\n \"10-08 #1\": {\n \"name\": {\n \"hr\": \"Dan neovisnosti\",\n \"en\": \"Independence Day\"\n },\n \"type\": \"public\",\n \"active\": [\n {\n \"to\": \"2020-01-01\"\n }\n ]\n },\n \"10-08\": {\n \"name\": {\n \"hr\": \"Dan Hrvatskoga sabora\",\n \"en\": \"Day of the Croatian Parliament\"\n },\n \"type\": \"observence\",\n \"active\": [\n {\n \"from\": \"2020-01-01\"\n }\n ]\n },\n \"11-01\": {\n \"_name\": \"11-01\",\n \"type\": \"public\"\n },\n \"11-18 #1\": {\n \"name\": {\n \"hr\": \"Dan sje\u0107anja na \u017Ertvu Vukovara i \u0160kabrnje\",\n \"en\": \"Remembrance Day\"\n },\n \"type\": \"observance\",\n \"active\": [\n {\n \"to\": \"2020-01-01\"\n }\n ]\n },\n \"11-18\": {\n \"name\": {\n \"hr\": \"Dan sje\u0107anja na \u017Ertve Domovinskog rata i Dan sje\u0107anja na \u017Ertvu Vukovara i \u0160kabrnje\",\n \"en\": \"Remembrance Day\"\n },\n \"type\": \"public\",\n \"active\": [\n {\n \"from\": \"2020-01-01\"\n }\n ]\n },\n \"12-25\": {\n \"_name\": \"12-25\",\n \"type\": \"public\"\n },\n \"12-26\": {\n \"_name\": \"12-26\",\n \"type\": \"public\"\n },\n \"orthodox\": {\n \"_name\": \"orthodox\",\n \"type\": \"optional\",\n \"note\": \"Orthodox believers (legally defined as Christians who follow the Julian Calender)\"\n },\n \"orthodox 1\": {\n \"_name\": \"orthodox 1\",\n \"type\": \"optional\",\n \"note\": \"Orthodox believers (legally defined as Christians who follow the Julian Calender)\"\n },\n \"julian 12-25\": {\n \"_name\": \"julian 12-25\",\n \"type\": \"optional\",\n \"note\": \"Orthodox believers (legally defined as Christians who follow the Julian Calender)\"\n },\n \"10 Dhu al-Hijjah\": {\n \"_name\": \"10 Dhu al-Hijjah\",\n \"type\": \"optional\",\n \"note\": \"Muslim believers\"\n },\n \"1 Shawwal\": {\n \"_name\": \"1 Shawwal\",\n \"type\": \"optional\",\n \"note\": \"Muslim believers\"\n },\n \"1 Tishrei\": {\n \"_name\": \"10 Tishrei\",\n \"type\": \"optional\",\n \"note\": \"Jewish believers\"\n },\n \"10 Tishrei\": {\n \"_name\": \"10 Tishrei\",\n \"type\": \"optional\",\n \"note\": \"Jewish believers\"\n }\n },\n \"regions\": {\n \"17\": {\n \"name\": \"Split-Dalmatia\",\n \"days\": {\n \"05-07\": {\n \"name\": {\n \"hr\": \"Sveti Duje\",\n \"en\": \"Saint Domnius\"\n },\n \"type\": \"optional\"\n }\n }\n },\n \"19\": {\n \"name\": \"Dubrovnik-Neretva\",\n \"days\": {\n \"02-03\": {\n \"name\": {\n \"hr\": \"Sveti Vlaho\",\n \"en\": \"Saint Blaise\"\n },\n \"type\": \"optional\"\n }\n }\n }\n }\n },\n \"HT\": {\n \"names\": {\n \"fr\": \"Ha\u00EFti\",\n \"en\": \"Haiti\"\n },\n \"dayoff\": \"sunday\",\n \"langs\": [\n \"fr\"\n ],\n \"zones\": [\n \"America/Port-au-Prince\"\n ],\n \"days\": {\n \"01-01\": {\n \"_name\": \"Independence Day\"\n },\n \"01-02\": {\n \"name\": {\n \"fr\": \"Jour des Aieux\",\n \"en\": \"Ancestry Day\"\n }\n },\n \"01-06\": {\n \"_name\": \"01-06\",\n \"name\": {\n \"fr\": \"Le Jour des Rois\"\n },\n \"type\": \"observance\"\n },\n \"easter -48 14:00\": {\n \"name\": {\n \"fr\": \"Lundi Gras\",\n \"en\": \"Lundi Gras\"\n }\n },\n \"easter -47\": {\n \"name\": {\n \"fr\": \"Mardi Gras\",\n \"en\": \"Mardi Gras\"\n }\n },\n \"easter -46\": {\n \"_name\": \"easter -46\",\n \"type\": \"observance\"\n },\n \"easter -2\": {\n \"_name\": \"easter -2\"\n },\n \"easter\": {\n \"_name\": \"easter\"\n },\n \"easter 39\": {\n \"_name\": \"easter 39\"\n },\n \"easter 60\": {\n \"_name\": \"easter 60\"\n },\n \"05-01\": {\n \"_name\": \"05-01\"\n },\n \"05-18\": {\n \"name\": {\n \"fr\": \"Jour du Drapeau et de l'Universit\u00E9\",\n \"en\": \"Flag and Universities' Day\"\n }\n },\n \"08-15\": {\n \"_name\": \"08-15\"\n },\n \"10-17\": {\n \"name\": {\n \"fr\": \"Anniversaire de la mort de Dessalines\",\n \"en\": \"Anniversary of the death of Dessalines\"\n }\n },\n \"11-01\": {\n \"_name\": \"11-01\"\n },\n \"11-02\": {\n \"_name\": \"11-02\"\n },\n \"11-18\": {\n \"name\": {\n \"fr\": \"Verti\u00E8res\",\n \"en\": \"Battle of Verti\u00E8res Day\"\n }\n },\n \"12-05\": {\n \"name\": {\n \"fr\": \"D\u00E9couverte d'Ha\u00EFti\",\n \"en\": \"Discovery Day\"\n },\n \"type\": \"observance\"\n },\n \"12-25\": {\n \"_name\": \"12-25\"\n }\n }\n },\n \"HU\": {\n \"names\": {\n \"hu\": \"Magyarorsz\u00E1g\",\n \"en\": \"Hungary\"\n },\n \"dayoff\": \"sunday\",\n \"langs\": [\n \"hu\"\n ],\n \"zones\": [\n \"Europe/Budapest\"\n ],\n \"days\": {\n \"01-01\": {\n \"_name\": \"01-01\",\n \"type\": \"public\"\n },\n \"02-01\": {\n \"name\": {\n \"hu\": \"A k\u00F6zt\u00E1rsas\u00E1g eml\u00E9knapja\",\n \"en\": \"Memorial Day of the Republic\"\n },\n \"type\": \"observance\"\n },\n \"02-25\": {\n \"name\": {\n \"hu\": \"A kommunista diktat\u00FAr\u00E1k \u00E1ldozatainak eml\u00E9knapja\",\n \"en\": \"Memorial Day for the Victims of the Communist Dictatorships\"\n },\n \"type\": \"observance\"\n },\n \"03-08\": {\n \"_name\": \"03-08\",\n \"type\": \"observance\"\n },\n \"03-15\": {\n \"name\": {\n \"hu\": \"1948-as forradalom\",\n \"en\": \"National Day\"\n },\n \"type\": \"public\"\n },\n \"04-16\": {\n \"name\": {\n \"en\": \"Memorial Day for the Victims of the Holocaust\",\n \"hu\": \"A holokauszt \u00E1ldozatainak eml\u00E9knapja\"\n },\n \"type\": \"observance\"\n },\n \"easter\": {\n \"_name\": \"easter\",\n \"type\": \"public\"\n },\n \"easter 1\": {\n \"_name\": \"easter 1\",\n \"type\": \"public\"\n },\n \"05-01\": {\n \"_name\": \"05-01\",\n \"type\": \"public\"\n },\n \"1st sunday in May\": {\n \"_name\": \"Mothers Day\",\n \"type\": \"observance\"\n },\n \"05-21\": {\n \"name\": {\n \"en\": \"National Defense Day\",\n \"hu\": \"Honv\u00E9delmi nap\"\n },\n \"type\": \"observance\"\n },\n \"easter 49\": {\n \"_name\": \"easter 49\",\n \"type\": \"public\"\n },\n \"easter 50\": {\n \"_name\": \"easter 50\",\n \"type\": \"public\"\n },\n \"06-04\": {\n \"name\": {\n \"en\": \"Day of National Unity\",\n \"hu\": \"A nemzeti \u00F6sszetartoz\u00E1s napja\"\n },\n \"type\": \"observance\"\n },\n \"06-19\": {\n \"name\": {\n \"en\": \"Day of the Independent Hungary\",\n \"hu\": \"A f\u00FCggetlen Magyarorsz\u00E1g napja\"\n },\n \"type\": \"observance\"\n },\n \"08-20\": {\n \"name\": {\n \"hu\": \"Szent Istv\u00E1n \u00FCnnepe\",\n \"en\": \"Saint Stephen's Day\"\n },\n \"type\": \"public\"\n },\n \"10-06\": {\n \"name\": {\n \"en\": \"Memorial Day for the Martyrs of Arad\",\n \"hu\": \"Az aradi v\u00E9rtan\u00FAk eml\u00E9knapja\"\n },\n \"type\": \"observance\"\n },\n \"10-23\": {\n \"name\": {\n \"hu\": \"1956-os forradalom\",\n \"en\": \"National Day\"\n },\n \"type\": \"public\"\n },\n \"11-01\": {\n \"_name\": \"11-01\",\n \"type\": \"public\"\n },\n \"12-06\": {\n \"_name\": \"12-06\",\n \"type\": \"observance\"\n },\n \"12-24\": {\n \"_name\": \"12-24\",\n \"type\": \"optional\"\n },\n \"12-25\": {\n \"_name\": \"12-25\",\n \"type\": \"public\"\n },\n \"12-26\": {\n \"_name\": \"12-26\",\n \"type\": \"public\"\n },\n \"12-31\": {\n \"_name\": \"12-31\",\n \"type\": \"observance\"\n }\n }\n },\n \"IC\": {\n \"names\": {\n \"es\": \"Islas Canarias\",\n \"en\": \"Canary Islands\"\n },\n \"langs\": [\n \"es\"\n ],\n \"zones\": [\n \"Atlantic/Canary\"\n ],\n \"dayoff\": \"sunday\",\n \"_days\": \"ES\",\n \"days\": {\n \"05-30\": {\n \"name\": {\n \"es\": \"D\u00EDa de Canarias\",\n \"en\": \"Canary Islands Day\"\n }\n },\n \"substitutes 05-30 if Sunday then next Monday\": {\n \"substitute\": true,\n \"name\": {\n \"es\": \"D\u00EDa de Canarias\",\n \"en\": \"Canary Islands Day\"\n }\n },\n \"substitutes 08-15 if Sunday then next Monday\": {\n \"substitute\": true,\n \"_name\": \"08-15\"\n }\n },\n \"regions\": {\n \"EH\": {\n \"names\": {\n \"es\": \"El Hierro\"\n },\n \"days\": {\n \"09-24\": {\n \"name\": {\n \"es\": \"Nuestra Se\u00F1ora de los Reyes\"\n }\n }\n }\n },\n \"FU\": {\n \"names\": {\n \"es\": \"Fuerteventura\"\n },\n \"days\": {\n \"09-18\": {\n \"name\": {\n \"es\": \"Nuestra Se\u00F1ora de la Pe\u00F1a\"\n }\n }\n }\n },\n \"GC\": {\n \"names\": {\n \"es\": \"Gran Canaria\"\n },\n \"days\": {\n \"09-08\": {\n \"name\": {\n \"es\": \"Nuestra Se\u00F1ora del Pino\"\n }\n }\n }\n },\n \"LG\": {\n \"names\": {\n \"es\": \"La Gomera\"\n },\n \"days\": {\n \"10-05\": {\n \"name\": {\n \"es\": \"Nuestra Se\u00F1ora de Guadalupe\"\n }\n }\n }\n },\n \"LP\": {\n \"names\": {\n \"es\": \"La Palma\"\n },\n \"days\": {\n \"08-05\": {\n \"name\": {\n \"es\": \"Nuestra Se\u00F1ora de las Nieves\"\n }\n }\n }\n },\n \"LA\": {\n \"names\": {\n \"es\": \"Lanzarote\"\n },\n \"days\": {\n \"09-15\": {\n \"name\": {\n \"es\": \"Nuestra Se\u00F1ora de los Dolores\"\n }\n }\n }\n },\n \"TE\": {\n \"names\": {\n \"es\": \"Tenerife\"\n },\n \"days\": {\n \"09-07\": {\n \"name\": {\n \"es\": \"La Bajada de la Virgen del Socorro\"\n }\n }\n }\n }\n }\n },\n \"ID\": {\n \"names\": {\n \"en\": \"Indonesia\",\n \"id\": \"Indonesia\"\n },\n \"langs\": [\n \"id\"\n ],\n \"zones\": [\n \"Asia/Jakarta\",\n \"Asia/Pontianak\",\n \"Asia/Makassar\",\n \"Asia/Jayapura\"\n ],\n \"dayoff\": \"sunday\",\n \"days\": {\n \"01-01\": {\n \"_name\": \"01-01\"\n },\n \"chinese 01-0-01\": {\n \"name\": {\n \"en\": \"Chinese New Year\",\n \"id\": \"Tahun Baru Imlek\"\n }\n },\n \"easter -2\": {\n \"_name\": \"easter -2\"\n },\n \"05-01\": {\n \"_name\": \"05-01\"\n },\n \"easter 39\": {\n \"_name\": \"easter 39\"\n },\n \"06-01\": {\n \"name\": {\n \"en\": \"Pancasila Day\",\n \"id\": \"Hari Lahir Pancasila\"\n }\n },\n \"08-17\": {\n \"_name\": \"Independence Day\"\n },\n \"12-25\": {\n \"_name\": \"12-25\"\n },\n \"1 Muharram\": {\n \"_name\": \"1 Muharram\"\n },\n \"12 Rabi al-awwal\": {\n \"_name\": \"12 Rabi al-awwal\"\n },\n \"27 Rajab\": {\n \"_name\": \"27 Rajab\"\n },\n \"1 Shawwal\": {\n \"_name\": \"1 Shawwal\"\n },\n \"2 Shawwal\": {\n \"_name\": \"1 Shawwal\"\n },\n \"10 Dhu al-Hijjah\": {\n \"_name\": \"10 Dhu al-Hijjah\"\n },\n \"2009-03-26\": {\n \"name\": {\n \"en\": \"Nyepi\",\n \"id\": \"Hari Raya Nyepi\"\n }\n },\n \"2010-03-16\": {\n \"name\": {\n \"en\": \"Nyepi\",\n \"id\": \"Hari Raya Nyepi\"\n }\n },\n \"2011-03-05\": {\n \"name\": {\n \"en\": \"Nyepi\",\n \"id\": \"Hari Raya Nyepi\"\n }\n },\n \"2012-03-23\": {\n \"name\": {\n \"en\": \"Nyepi\",\n \"id\": \"Hari Raya Nyepi\"\n }\n },\n \"2013-03-12\": {\n \"name\": {\n \"en\": \"Nyepi\",\n \"id\": \"Hari Raya Nyepi\"\n }\n },\n \"2014-03-31\": {\n \"name\": {\n \"en\": \"Nyepi\",\n \"id\": \"Hari Raya Nyepi\"\n }\n },\n \"2015-03-21\": {\n \"name\": {\n \"en\": \"Nyepi\",\n \"id\": \"Hari Raya Nyepi\"\n }\n },\n \"2016-03-09\": {\n \"name\": {\n \"en\": \"Nyepi\",\n \"id\": \"Hari Raya Nyepi\"\n }\n },\n \"2017-03-28\": {\n \"name\": {\n \"en\": \"Nyepi\",\n \"id\": \"Hari Raya Nyepi\"\n }\n },\n \"2018-03-17\": {\n \"name\": {\n \"en\": \"Nyepi\",\n \"id\": \"Hari Raya Nyepi\"\n }\n },\n \"2019-03-07\": {\n \"name\": {\n \"en\": \"Nyepi\",\n \"id\": \"Hari Raya Nyepi\"\n }\n },\n \"2020-03-25\": {\n \"name\": {\n \"en\": \"Nyepi\",\n \"id\": \"Hari Raya Nyepi\"\n }\n },\n \"2021-03-14\": {\n \"name\": {\n \"en\": \"Nyepi\",\n \"id\": \"Hari Raya Nyepi\"\n }\n },\n \"2022-03-03\": {\n \"name\": {\n \"en\": \"Nyepi\",\n \"id\": \"Hari Raya Nyepi\"\n }\n },\n \"2023-03-22\": {\n \"name\": {\n \"en\": \"Nyepi\",\n \"id\": \"Hari Raya Nyepi\"\n }\n },\n \"2024-03-11\": {\n \"name\": {\n \"en\": \"Nyepi\",\n \"id\": \"Hari Raya Nyepi\"\n }\n },\n \"2025-03-29\": {\n \"name\": {\n \"en\": \"Nyepi\",\n \"id\": \"Hari Raya Nyepi\"\n }\n },\n \"2026-03-19\": {\n \"name\": {\n \"en\": \"Nyepi\",\n \"id\": \"Hari Raya Nyepi\"\n }\n },\n \"2001-05-07\": {\n \"_name\": \"Vesak\"\n },\n \"2002-05-26\": {\n \"_name\": \"Vesak\"\n },\n \"2003-05-16\": {\n \"_name\": \"Vesak\"\n },\n \"2004-06-03\": {\n \"_name\": \"Vesak\"\n },\n \"2005-05-24\": {\n \"_name\": \"Vesak\"\n },\n \"2006-05-13\": {\n \"_name\": \"Vesak\"\n },\n \"2007-06-01\": {\n \"_name\": \"Vesak\"\n },\n \"2008-05-20\": {\n \"_name\": \"Vesak\"\n },\n \"2009-05-09\": {\n \"_name\": \"Vesak\"\n },\n \"2010-05-28\": {\n \"_name\": \"Vesak\"\n },\n \"2011-05-17\": {\n \"_name\": \"Vesak\"\n },\n \"2012-05-06\": {\n \"_name\": \"Vesak\"\n },\n \"2013-05-25\": {\n \"_name\": \"Vesak\"\n },\n \"2014-05-15\": {\n \"_name\": \"Vesak\"\n },\n \"2015-06-02\": {\n \"_name\": \"Vesak\"\n },\n \"2016-05-22\": {\n \"_name\": \"Vesak\"\n },\n \"2017-05-11\": {\n \"_name\": \"Vesak\"\n },\n \"2018-05-29\": {\n \"_name\": \"Vesak\"\n },\n \"2019-05-19\": {\n \"_name\": \"Vesak\"\n },\n \"2020-05-07\": {\n \"_name\": \"Vesak\"\n },\n \"2021-05-26\": {\n \"_name\": \"Vesak\"\n },\n \"2022-05-16\": {\n \"_name\": \"Vesak\"\n },\n \"2023-05-06\": {\n \"_name\": \"Vesak\"\n },\n \"2024-05-23\": {\n \"_name\": \"Vesak\"\n }\n }\n },\n \"IE\": {\n \"names\": {\n \"en\": \"Ireland\"\n },\n \"dayoff\": \"sunday\",\n \"zones\": [\n \"Europe/Dublin\"\n ],\n \"langs\": [\n \"en\"\n ],\n \"days\": {\n \"01-01\": {\n \"_name\": \"01-01\"\n },\n \"03-17\": {\n \"name\": {\n \"en\": \"St. Patrick\u2019s Day\"\n }\n },\n \"03-17 and if saturday then next monday if sunday then next monday\": {\n \"name\": {\n \"en\": \"St. Patrick\u2019s Day\"\n },\n \"substitute\": true,\n \"type\": \"bank\"\n },\n \"easter -21\": {\n \"_name\": \"Mothers Day\",\n \"type\": \"observance\"\n },\n \"easter -2\": {\n \"_name\": \"easter -2\",\n \"type\": \"bank\"\n },\n \"easter\": {\n \"_name\": \"easter\"\n },\n \"easter 1\": {\n \"_name\": \"easter 1\"\n },\n \"1st monday in May\": {\n \"name\": {\n \"en\": \"May Day\"\n }\n },\n \"1st monday in June\": {\n \"name\": {\n \"en\": \"First Monday in June\"\n }\n },\n \"1st monday in August\": {\n \"name\": {\n \"en\": \"First Monday in August\"\n }\n },\n \"1st monday before 10-31\": {\n \"name\": {\n \"en\": \"October Bank Holiday\",\n \"type\": \"bank\"\n }\n },\n \"12-25\": {\n \"_name\": \"12-25\"\n },\n \"12-26\": {\n \"_name\": \"12-26\",\n \"name\": {\n \"en\": \"St. Stephen's Day\"\n }\n },\n \"12-26 and if saturday then next monday if sunday then next monday\": {\n \"_name\": \"12-26\",\n \"name\": {\n \"en\": \"St. Stephen's Day\"\n },\n \"substitute\": true,\n \"type\": \"bank\"\n },\n \"12-27 if saturday then next monday if sunday then next tuesday\": {\n \"name\": {\n \"en\": \"Christmas Bank Holiday\"\n },\n \"type\": \"bank\"\n },\n \"3rd sunday in June\": {\n \"_name\": \"Fathers Day\",\n \"type\": \"observance\"\n }\n }\n },\n \"IL\": {\n \"names\": {\n \"he\": \"\u05DE\u05B0\u05D3\u05B4\u05D9\u05E0\u05B7\u05EA \u05D9\u05B4\u05E9\u05B0\u05C2\u05E8\u05B8\u05D0\u05B5\u05DC\",\n \"en\": \"Israel\"\n },\n \"langs\": [\n \"he\"\n ],\n \"zones\": [\n \"Asia/Jerusalem\"\n ],\n \"dayoff\": \"Saturday\",\n \"days\": {\n \"1 Tishrei\": {\n \"name\": {\n \"he\": \"\u05E8\u05D0\u05E9 \u05D4\u05E9\u05E0\u05D4\",\n \"en\": \"Rosh Hashanah (Yom Teruah)\"\n }\n },\n \"2 Tishrei\": {\n \"name\": {\n \"he\": \"\u05E8\u05D0\u05E9 \u05D4\u05E9\u05E0\u05D4 \u05D9\u05D5\u05DD 2\",\n \"en\": \"Rosh Hashanah (Day 2)\"\n }\n },\n \"3 Tishrei if Saturday then next Sunday\": {\n \"name\": {\n \"he\": \"\u05E6\u05D5\u05DD \u05D2\u05D3\u05DC\u05D9\u05D4\",\n \"en\": \"Fast of Gedaliah (Tzom Gedalya)\"\n },\n \"type\": \"observance\"\n },\n \"10 Tishrei\": {\n \"name\": {\n \"he\": \"\u05D9\u05D5\u05DD \u05DB\u05D9\u05E4\u05D5\u05E8\",\n \"en\": \"Day of Atonement (Yom Kippur)\"\n }\n },\n \"15 Tishrei\": {\n \"name\": {\n \"he\": \"\u05E1\u05D5\u05DB\u05D5\u05EA\",\n \"en\": \"Feast of Tabernacles (Sukkot)\"\n }\n },\n \"16 Tishrei P6D\": {\n \"name\": {\n \"he\": \"\u05D7\u05D5\u05DC \u05D4\u05DE\u05D5\u05E2\u05D3 \u05E1\u05D5\u05DB\u05D5\u05EA\",\n \"en\": \"The week of Sukkot\"\n },\n \"type\": \"school\",\n \"note\": \"Collective paid leave in many businesses and government offices\"\n },\n \"22 Tishrei\": {\n \"name\": {\n \"he\": \"\u05E9\u05DE\u05D7\u05EA \u05EA\u05D5\u05E8\u05D4/\u05E9\u05DE\u05D9\u05E0\u05D9 \u05E2\u05E6\u05E8\u05EA\",\n \"en\": \"Simchat Torah/ Shmini Atzeret\"\n }\n },\n \"12 Cheshvan if Friday,Saturday then previous Thursday since 1997\": {\n \"name\": {\n \"he\": \"\u05D9\u05D5\u05DD \u05E8\u05D1\u05D9\u05DF\",\n \"en\": \"Rabin Day\"\n },\n \"type\": \"observance\",\n \"note\": \"National remembrance day, business as usual\"\n },\n \"29 Cheshvan\": {\n \"name\": {\n \"he\": \"\u05E1\u05D9\u05D2\u05D3\",\n \"en\": \"Sigd\"\n },\n \"type\": \"observance\",\n \"note\": \"Festival of the Ethiopian Jews, optional paid leave, business as usual\"\n },\n \"6 Kislev if Saturday then next Sunday\": {\n \"name\": {\n \"en\": \"Ben-Gurion Day\",\n \"he\": \"\u05D9\u05D5\u05DD \u05D1\u05DF-\u05D2\u05D5\u05E8\u05D9\u05D5\u05DF\"\n },\n \"type\": \"observance\",\n \"note\": \"Day marked by the Knesset\"\n },\n \"25 Kislev P8D\": {\n \"name\": {\n \"en\": \"Hanukkah\",\n \"he\": \"\u05D7\u05E0\u05D5\u05DB\u05D4\"\n },\n \"type\": \"school\"\n },\n \"10 Tevet\": {\n \"name\": {\n \"en\": \"Tenth of Tevet\",\n \"he\": \"\u05E6\u05D5\u05DD \u05E2\u05E9\u05E8\u05D4 \u05D1\u05D8\u05D1\u05EA\"\n },\n \"type\": \"observance\"\n },\n \"15 Shvat\": {\n \"name\": {\n \"en\": \"Tu Bishvat (Arbor Day)\",\n \"he\": \"\u05D8\\\"\u05D5 \u05D1\u05E9\u05D1\u05D8\"\n },\n \"type\": \"observance\"\n },\n \"13 AdarII if Saturday then previous Thursday\": {\n \"name\": {\n \"en\": \"Fast of Esther\",\n \"he\": \"\u05EA\u05E2\u05E0\u05D9\u05EA \u05D0\u05E1\u05EA\u05E8\"\n },\n \"type\": \"school\"\n },\n \"14 AdarII P2D\": {\n \"name\": {\n \"en\": \"Purim\",\n \"he\": \"\u05E4\u05D5\u05E8\u05D9\u05DD\"\n },\n \"type\": \"school\",\n \"note\": \"optional paid leave\"\n },\n \"10 Nisan\": {\n \"name\": {\n \"en\": \"Aliyah Day\",\n \"he\": \"\u05D9\u05D5\u05DD \u05D4\u05E2\u05DC\u05D9\u05D9\u05D4\"\n },\n \"type\": \"observance\",\n \"note\": \"Official holiday, business as usual\"\n },\n \"15 Nisan\": {\n \"name\": {\n \"en\": \"Passover (Pesach)\",\n \"he\": \"\u05E4\u05E1\u05D7\"\n }\n },\n \"16 Nisan P5D\": {\n \"name\": {\n \"en\": \"Passover (intermediate days)\",\n \"he\": \"\u05D7\u05D5\u05DC \u05D4\u05DE\u05D5\u05E2\u05D3 \u05E4\u05E1\u05D7\"\n },\n \"type\": \"school\",\n \"note\": \"School holiday, collective paid leave in many businesses and government offices\"\n },\n \"21 Nisan\": {\n \"name\": {\n \"en\": \"Mimouna, Seventh day of Passover\",\n \"he\": \"\u05DE\u05D9\u05DE\u05D5\u05E0\u05D4, \u05E9\u05D1\u05D9\u05E2\u05D9 \u05E9\u05DC \u05E4\u05E1\u05D7\"\n }\n },\n \"27 Nisan if Friday then previous Thursday if Sunday then next Monday\": {\n \"name\": {\n \"en\": \"Holocaust Remembrance Day (Yom HaShoah)\",\n \"he\": \"\u05D9\u05D5\u05DD \u05D4\u05D6\u05D9\u05DB\u05E8\u05D5\u05DF \u05DC\u05E9\u05D5\u05D0\u05D4 \u05D5\u05DC\u05D2\u05D1\u05D5\u05E8\u05D4\"\n },\n \"type\": \"observance\",\n \"note\": \"National remembrance day, business as usual except places of public entertainment\"\n },\n \"05-09\": {\n \"name\": {\n \"en\": \"Victory in Europe Day\",\n \"he\": \"\u05D9\u05D5\u05DD \u05D4\u05E0\u05D9\u05E6\u05D7\u05D5\u05DF \u05E2\u05DC \u05D2\u05E8\u05DE\u05E0\u05D9\u05D4 \u05D4\u05E0\u05D0\u05E6\u05D9\u05EA\"\n },\n \"type\": \"observance\"\n },\n \"4 Iyyar if Thursday,Friday then previous Wednesday if Sunday then next Monday\": {\n \"name\": {\n \"en\": \"Fallen Soldiers and Victims of Terrorism Remembrance Day (Yom HaZikaron)\",\n \"he\": \"\u05D9\u05D5\u05DD \u05D4\u05D6\u05D9\u05DB\u05E8\u05D5\u05DF \u05DC\u05D7\u05DC\u05DC\u05D9 \u05DE\u05E2\u05E8\u05DB\u05D5\u05EA \u05D9\u05E9\u05E8\u05D0\u05DC \u05D5\u05E0\u05E4\u05D2\u05E2\u05D9 \u05E4\u05E2\u05D5\u05DC\u05D5\u05EA \u05D4\u05D0\u05D9\u05D1\u05D4\"\n },\n \"type\": \"observance\",\n \"note\": \"National remembrance day, business as usual except places of public entertainment\"\n },\n \"5 Iyyar if Friday,Saturday then previous Thursday if Monday then next Tuesday\": {\n \"name\": {\n \"en\": \"Independence Day (Yom HaAtzmaut)\",\n \"he\": \"\u05D9\u05D5\u05DD \u05D4\u05E2\u05E6\u05DE\u05D0\u05D5\u05EA\"\n }\n },\n \"10 Iyyar if Saturday then next Sunday since 2004\": {\n \"name\": {\n \"en\": \"Herzl Day\",\n \"he\": \"\u05D9\u05D5\u05DD \u05D4\u05E8\u05E6\u05DC\"\n },\n \"type\": \"observance\",\n \"note\": \"Day marked by the Knesset\"\n },\n \"18 Iyyar\": {\n \"name\": {\n \"en\": \"Lag BaOmer\",\n \"he\": \"\u05DC\\\"\u05D2 \u05D1\u05E2\u05D5\u05DE\u05E8\"\n },\n \"type\": \"school\"\n },\n \"28 Iyyar\": {\n \"name\": {\n \"en\": \"Jerusalem Day (Yom Yerushalayim)\",\n \"he\": \"\u05D9\u05D5\u05DD \u05D9\u05E8\u05D5\u05E9\u05DC\u05D9\u05DD\"\n },\n \"type\": \"observance\",\n \"note\": \"Optional paid leave\"\n },\n \"6 Sivan\": {\n \"name\": {\n \"en\": \"Shavuot (Feast of Weeks)\",\n \"he\": \"\u05E9\u05D1\u05D5\u05E2\u05D5\u05EA\"\n }\n },\n \"17 Tamuz if Saturday then next Sunday\": {\n \"name\": {\n \"en\": \"Seventeenth of Tamuz, fast\",\n \"he\": \"\u05E9\u05D1\u05E2\u05D4 \u05E2\u05E9\u05E8 \u05D1\u05EA\u05DE\u05D5\u05D6\"\n },\n \"type\": \"observance\"\n },\n \"29 Tamuz if Saturday then next Sunday\": {\n \"name\": {\n \"en\": \"Jabotinsky Day\",\n \"he\": \"\u05D9\u05D5\u05DD \u05D6'\u05D1\u05D5\u05D8\u05D9\u05E0\u05E1\u05E7\u05D9\"\n },\n \"type\": \"observance\",\n \"note\": \"Day marked by the Knesset\"\n },\n \"9 Av if Saturday then next Sunday\": {\n \"name\": {\n \"en\": \"Tisha B'Av, fast\",\n \"he\": \"\u05EA\u05E9\u05E2\u05D4 \u05D1\u05D0\u05D1\"\n },\n \"type\": \"observance\",\n \"note\": \"Optional paid leave, business as usual except places of public entertainment\"\n },\n \"15 Av\": {\n \"name\": {\n \"en\": \"Tu B'Av (Fifteenth of Av)\",\n \"he\": \"\u05D8\\\"\u05D5 \u05D1\u05D0\u05D1\"\n },\n \"type\": \"observance\"\n },\n \"2015-03-17\": {\n \"name\": {\n \"en\": \"Election Day\",\n \"he\": \"\u05D9\u05D5\u05DD \u05D4\u05D1\u05D7\u05D9\u05E8\u05D5\u05EA\"\n }\n },\n \"2019-04-09\": {\n \"name\": {\n \"en\": \"Election Day\",\n \"he\": \"\u05D9\u05D5\u05DD \u05D4\u05D1\u05D7\u05D9\u05E8\u05D5\u05EA\"\n }\n },\n \"2019-09-17\": {\n \"name\": {\n \"en\": \"Election Day\",\n \"he\": \"\u05D9\u05D5\u05DD \u05D4\u05D1\u05D7\u05D9\u05E8\u05D5\u05EA\"\n }\n },\n \"2020-03-02\": {\n \"name\": {\n \"en\": \"Election Day\",\n \"he\": \"\u05D9\u05D5\u05DD \u05D4\u05D1\u05D7\u05D9\u05E8\u05D5\u05EA\"\n }\n },\n \"2021-03-23\": {\n \"name\": {\n \"en\": \"Election Day\",\n \"he\": \"\u05D9\u05D5\u05DD \u05D4\u05D1\u05D7\u05D9\u05E8\u05D5\u05EA\"\n }\n }\n }\n },\n \"IM\": {\n \"names\": {\n \"en\": \"Isle of Man\"\n },\n \"zones\": [\n \"Europe/Isle_of_Man\"\n ],\n \"langs\": [\n \"en\"\n ],\n \"_days\": [\n \"GB\"\n ],\n \"days\": {\n \"2nd friday in June\": {\n \"name\": {\n \"en\": \"Tourist Trophy, Senior Race Day\"\n }\n },\n \"07-05\": {\n \"name\": {\n \"en\": \"Tynwald Day\"\n }\n }\n }\n },\n \"IR\": {\n \"names\": {\n \"fa\": \"\u062C\u0645\u0647\u0648\u0631\u06CC \u0627\u0633\u0644\u0627\u0645\u06CC \u0627\u06CC\u0631\u0627\u0646\",\n \"en\": \"Iran\"\n },\n \"langs\": [\n \"fa\",\n \"en\"\n ],\n \"zones\": [\n \"Asia/Tehran\"\n ],\n \"dayoff\": \"Friday\",\n \"days\": {\n \"1 Farvardin\": {\n \"name\": {\n \"fa\": \"\u0646\u0648\u0631\u0648\u0632\",\n \"en\": \"Nowruz\"\n }\n },\n \"2 Farvardin\": {\n \"name\": {\n \"fa\": \"\u0646\u0648\u0631\u0648\u0632\",\n \"en\": \"Nowruz\"\n }\n },\n \"3 Farvardin\": {\n \"name\": {\n \"fa\": \"\u0646\u0648\u0631\u0648\u0632\",\n \"en\": \"Nowruz\"\n }\n },\n \"4 Farvardin\": {\n \"name\": {\n \"fa\": \"\u0646\u0648\u0631\u0648\u0632\",\n \"en\": \"Nowruz\"\n }\n },\n \"12 Farvardin\": {\n \"name\": {\n \"fa\": \"\u0631\u0648\u0632 \u062C\u0645\u0647\u0648\u0631\u06CC \u0627\u0633\u0644\u0627\u0645\u06CC\",\n \"en\": \"Islamic Republic Day\"\n }\n },\n \"13 Farvardin\": {\n \"name\": {\n \"fa\": \"\u0633\u06CC\u0632\u062F\u0647 \u0628\u062F\u0631\",\n \"en\": \"Sizdah Bedar\"\n }\n },\n \"14 Khordad\": {\n \"name\": {\n \"fa\": \"\u0631\uFEA3\uFEE0\uFE96 \u0627\uFEE3\uFE8E\u0645 \uFEA7\uFEE4\uFBFF\uFEE8\uFBFD\",\n \"en\": \"Imam Khomeini's Demise\"\n }\n },\n \"15 Khordad\": {\n \"name\": {\n \"fa\": \"\u0642\u06CC\u0627\u0645 \u06F1\u06F5 \u062E\u0631\u062F\u0627\u062F\",\n \"en\": \"Revolt of Khordad 15\"\n }\n },\n \"22 Bahman\": {\n \"name\": {\n \"fa\": \"\u0627\u0646\u0642\u0644\u0627\u0628 \u0627\u0633\u0644\u0627\u0645\u06CC \u067E\u0646\u062C\u0627\u0647 \u0648 \u0647\u0641\u062A\",\n \"en\": \"Anniversary of Islamic Revolution\"\n }\n },\n \"29 Esfand\": {\n \"name\": {\n \"fa\": \"\u0645\u0644\u06CC \u0634\u062F\u0646 \u0635\u0646\u0639\u062A \u0646\u0641\u062A\",\n \"en\": \"Nationalization of the Iranian oil industry\"\n }\n },\n \"9 Muharram\": {\n \"name\": {\n \"fa\": \"\uFE97\uFE8E\uFEB3\uFEEE\uFECB\uFE8E\u06CC \uFEA3\uFEB4\uFBFF\uFEE8\uFBFD\",\n \"en\": \"Tasoua\"\n }\n },\n \"10 Muharram\": {\n \"name\": {\n \"fa\": \"\uFECB\uFE8E\uFEB7\uFEEE\u0631\u0627\u06CC \uFEA3\uFEB4\uFBFF\uFEE8\uFBFD\",\n \"en\": \"Ashoura\"\n }\n },\n \"20 Safar\": {\n \"name\": {\n \"fa\": \"\u0627\u0631\u0628\u0639\u06CC\u0646 \u062D\u0633\u06CC\u0646\u06CC\",\n \"en\": \"Arbaeen-e Hosseini\"\n }\n },\n \"28 Safar\": {\n \"name\": {\n \"fa\": \"\u0631\uFEA3\uFEE0\uFE96 \uFEA3\uFEC0\uFEAE\u062A \u0631\uFEB3\uFEEE\u0644 \u0627\uFB90\uFEAE\u0645 \u0635\u0644\u0651\u06CC \u0627\u0644\u0644\u0647 \u0639\u0644\u06CC\u0647 \u0648\u0622\u0644\u0647 \u0648 \u0633\u0644\u0651\u0645\",\n \"en\": \"Demise of Prophet Muhammad and Imam Hassan (Mujtaba)\"\n }\n },\n \"30 Safar\": {\n \"name\": {\n \"fa\": \"\uFEB7\uFEEC\uFE8E\u062F\u062A \uFEA3\uFEC0\uFEAE\u062A \u0627\uFEE3\uFE8E\u0645 \u0631\uFEBF\uFE8E \uFECB\uFEE0\uFBFF\uFEEA\u0627\uFEDF\uFEB4\uFEFC\u0645\",\n \"en\": \"Martyrdom of Imam Reza\"\n }\n },\n \"8 Rabi al-awwal\": {\n \"name\": {\n \"fa\": \"\u0634\u0647\u0627\u062F\u062A \u0627\u0645\u0627\u0645 \u062D\u0633\u0646 \u0639\u0633\u0643\u0631\u06CC \u0639\u0644\u06CC\u0647\u200C\u0627\u0644\u0633\u0644\u0627\u0645\",\n \"en\": \"Martyrdom of Imam Hassan\"\n }\n },\n \"17 Rabi al-awwal\": {\n \"name\": {\n \"fa\": \"\u0648\u0644\u0627\u062F\u062A \u062D\u0636\u0631\u062A \u0631\u0633\u0648\u0644 \u0627\u06A9\u0631\u0645 \u0635\u0644\u0651\u06CC \u0627\u0644\u0644\u0647 \u0639\u0644\u06CC\u0647 \u0648\u0622\u0644\u0647 \u0648 \u0633\u0644\u0651\u0645\",\n \"en\": \"Birthday of Muhammad Prophet\"\n }\n },\n \"3 Jumada al-thani\": {\n \"name\": {\n \"fa\": \"\uFEB7\uFEEC\uFE8E\u062F\u062A \uFEA3\uFEC0\uFEAE\u062A \uFED3\uFE8E\uFEC3\uFEE4\uFEEA \u0632\uFEEB\uFEAE\u0627 \uFEB3\uFEFC\u0645 \u0627\uFDF2 \uFECB\uFEE0\uFBFF\uFEEC\uFE8E\",\n \"en\": \"Martyrdom of Fatima-Zahara\"\n }\n },\n \"13 Rajab\": {\n \"name\": {\n \"fa\": \"\u0648\uFEFB\u062F\u062A \uFEA3\uFEC0\uFEAE\u062A \u0627\uFEE3\uFE8E\u0645 \uFECB\uFEE0\uFBFD \uFECB\uFEE0\uFBFF\uFEEA \u0627\uFEDF\uFEB4\uFEFC\u0645\",\n \"en\": \"Birthday of Imam Ali\"\n }\n },\n \"27 Rajab\": {\n \"name\": {\n \"fa\": \"\uFEE3\uFE92\uFECC\uFE9A \uFEA3\uFEC0\uFEAE\u062A \u0631\uFEB3\uFEEE\u0644 \u0627\uFB90\uFEAE\u0645 \uFEBB\uFEE0\uFBFD \u0627\uFDF2 \uFECB\uFEE0\uFBFF\uFEEA \u0648 \u0622\uFEDF\uFEEA\",\n \"en\": \"Mabaas of Muhammad\"\n }\n },\n \"15 Shaban\": {\n \"name\": {\n \"fa\": \"\u0648\uFEFB\u062F\u062A \uFEA3\uFEC0\uFEAE\u062A \uFED7\uFE8E\uFE8B\uFEE2 \uFECB\uFEA0\uFEDE\u0627\uFDF2 \uFE97\uFECC\uFE8E\uFEDF\uFBFD \uFED3\uFEAE\uFE9F\uFEEA \u0634\u0631\u06CC\u0641\",\n \"en\": \"Birthday of Imam Mahdi\"\n }\n },\n \"21 Ramadan\": {\n \"name\": {\n \"fa\": \"\uFEB7\uFEEC\uFE8E\u062F\u062A \uFEA3\uFEC0\uFEAE\u062A \uFECB\uFEE0\uFBFD \uFECB\uFEE0\uFBFF\uFEEA\u0627\uFEDF\uFEB4\uFEFC\u0645\",\n \"en\": \"Martyrdom of Imam Ali\"\n }\n },\n \"1 Shawwal\": {\n \"_name\": \"1 Shawwal\"\n },\n \"2 Shawwal\": {\n \"name\": {\n \"fa\": \"\uFE91\uFEEA \uFEE3\uFEE8\uFE8E\uFEB3\uFE92\uFE96 \uFECB\uFBFF\uFEAA \uFEB3\uFECC\uFBFF\uFEAA \uFED3\uFEC4\uFEAE\",\n \"en\": \"Holyday for Fetr Eeid\"\n }\n },\n \"25 Shawwal\": {\n \"name\": {\n \"fa\": \"\uFEB7\uFEEC\uFE8E\u062F\u062A \uFEA3\uFEC0\uFEAE\u062A \u0627\uFEE3\uFE8E\u0645 \uFE9F\uFECC\uFED4\uFEAE \uFEBB\uFE8E\u062F\u0642 \uFECB\uFEE0\uFBFF\uFEEA\u0627\uFEDF\uFEB4\uFEFC\u0645\",\n \"en\": \"Martyrdom of Imam Jafar\"\n }\n },\n \"10 Dhu al-Hijjah\": {\n \"_name\": \"10 Dhu al-Hijjah\"\n },\n \"18 Dhu al-Hijjah\": {\n \"name\": {\n \"fa\": \"\uFECB\uFBFF\uFEAA \uFEB3\uFECC\uFBFF\uFEAA \uFECF\uFEAA\uFBFE\uFEAE \uFEA7\uFEE2\",\n \"en\": \"Eid al-Ghadeer\"\n }\n }\n }\n },\n \"IS\": {\n \"names\": {\n \"is\": \"\u00CDsland\",\n \"en\": \"Iceland\"\n },\n \"dayoff\": \"sunday\",\n \"zones\": [\n \"Atlantic/Reykjavik\"\n ],\n \"langs\": [\n \"is\"\n ],\n \"days\": {\n \"01-01\": {\n \"_name\": \"01-01\"\n },\n \"01-06\": {\n \"_name\": \"01-06\",\n \"type\": \"observance\"\n },\n \"friday after 01-18\": {\n \"name\": {\n \"is\": \"B\u00F3ndadagur\"\n },\n \"type\": \"observance\"\n },\n \"02-18\": {\n \"name\": {\n \"is\": \"Konudagur\",\n \"en\": \"Woman's Day\"\n },\n \"type\": \"observance\"\n },\n \"easter -48\": {\n \"name\": {\n \"is\": \"Bolludagur\"\n },\n \"type\": \"observance\"\n },\n \"easter -47\": {\n \"name\": {\n \"is\": \"Sprengidagur\"\n },\n \"type\": \"observance\"\n },\n \"easter -46\": {\n \"_name\": \"easter -46\",\n \"type\": \"observance\"\n },\n \"easter -7\": {\n \"_name\": \"easter -7\",\n \"type\": \"observance\"\n },\n \"easter -3\": {\n \"_name\": \"easter -3\"\n },\n \"easter -2\": {\n \"_name\": \"easter -2\"\n },\n \"easter\": {\n \"_name\": \"easter\"\n },\n \"easter 1\": {\n \"_name\": \"easter 1\"\n },\n \"thursday after 04-18\": {\n \"name\": {\n \"is\": \"Sumardagurinn fyrsti\",\n \"en\": \"First Day of Summer\"\n }\n },\n \"05-01\": {\n \"_name\": \"05-01\"\n },\n \"2nd sunday in May\": {\n \"_name\": \"Mothers Day\",\n \"type\": \"observance\"\n },\n \"easter 39\": {\n \"_name\": \"easter 39\"\n },\n \"easter 49\": {\n \"_name\": \"easter 49\"\n },\n \"easter 50\": {\n \"_name\": \"easter 50\"\n },\n \"1st sunday in June\": {\n \"name\": {\n \"is\": \"Sj\u00F3mannadagurinn\",\n \"en\": \"The Seamen's Day\"\n },\n \"type\": \"observance\"\n },\n \"06-17\": {\n \"name\": {\n \"is\": \"\u00CDslenski \u00FEj\u00F3\u00F0h\u00E1t\u00ED\u00F0ardagurinn\",\n \"en\": \"Icelandic National Day\"\n }\n },\n \"1st monday in August\": {\n \"name\": {\n \"is\": \"Fr\u00EDdagur verslunarmanna\",\n \"en\": \"Commerce Day\"\n }\n },\n \"saturday after 10-21\": {\n \"name\": {\n \"is\": \"Fyrsti vetrardagur\",\n \"en\": \"First Day of Winter\"\n },\n \"type\": \"observance\"\n },\n \"11-16\": {\n \"name\": {\n \"is\": \"Dagur \u00EDslenskrar tungu\",\n \"en\": \"Icelandic Language Day\"\n },\n \"type\": \"observance\"\n },\n \"12-23\": {\n \"name\": {\n \"is\": \"\u00DEorl\u00E1ksmessa\",\n \"en\": \"St \u00DEorl\u00E1kur's Day\"\n },\n \"type\": \"observance\"\n },\n \"12-24 13:00 if sunday then 00:00\": {\n \"_name\": \"12-24\"\n },\n \"12-25\": {\n \"_name\": \"12-25\"\n },\n \"12-26\": {\n \"_name\": \"12-26\"\n },\n \"12-31 13:00 if sunday then 00:00\": {\n \"_name\": \"12-31\"\n }\n }\n },\n \"IT\": {\n \"names\": {\n \"it\": \"Italia\",\n \"en\": \"Italia\"\n },\n \"dayoff\": \"sunday\",\n \"zones\": [\n \"Europe/Rome\"\n ],\n \"langs\": [\n \"it\"\n ],\n \"days\": {\n \"01-01\": {\n \"_name\": \"01-01\"\n },\n \"01-06\": {\n \"_name\": \"01-06\"\n },\n \"easter\": {\n \"_name\": \"easter\"\n },\n \"easter 1\": {\n \"_name\": \"easter 1\"\n },\n \"04-25\": {\n \"name\": {\n \"it\": \"Anniversario della Liberazione\",\n \"en\": \"Liberation Day\"\n }\n },\n \"05-01\": {\n \"_name\": \"05-01\"\n },\n \"2nd sunday in May\": {\n \"_name\": \"Mothers Day\",\n \"type\": \"observance\"\n },\n \"06-02\": {\n \"name\": {\n \"it\": \"Festa della Repubblica\",\n \"en\": \"Republic Day\"\n }\n },\n \"08-15\": {\n \"_name\": \"08-15\"\n },\n \"11-01\": {\n \"_name\": \"11-01\"\n },\n \"12-08\": {\n \"_name\": \"12-08\"\n },\n \"12-25\": {\n \"_name\": \"12-25\"\n },\n \"12-26\": {\n \"_name\": \"12-26\"\n },\n \"2011-03-17\": {\n \"name\": {\n \"it\": \"Festa Nazionale 2011\",\n \"en\": \"National Day 2011\"\n }\n }\n },\n \"states\": {\n \"32\": {\n \"name\": \"S\u00FCdtirol, Alto Adige\",\n \"days\": {\n \"easter 50\": {\n \"_name\": \"easter 50\"\n }\n }\n }\n }\n },\n \"JE\": {\n \"names\": {\n \"en\": \"Jersey\"\n },\n \"zones\": [\n \"Europe/Jersey\"\n ],\n \"langs\": [\n \"en\"\n ],\n \"_days\": [\n \"GB\"\n ],\n \"days\": {\n \"05-09\": {\n \"name\": {\n \"en\": \"Liberation Day\"\n }\n }\n }\n },\n \"JM\": {\n \"names\": {\n \"en\": \"Jamaica\"\n },\n \"dayoff\": \"sunday\",\n \"langs\": [\n \"en\"\n ],\n \"zones\": [\n \"America/Jamaica\"\n ],\n \"days\": {\n \"01-01 and if sunday then next monday\": {\n \"_name\": \"01-01\",\n \"substitute\": true\n },\n \"easter -46\": {\n \"_name\": \"easter -46\"\n },\n \"easter -2\": {\n \"_name\": \"easter -2\"\n },\n \"easter\": {\n \"_name\": \"easter\",\n \"type\": \"observance\"\n },\n \"easter 1\": {\n \"_name\": \"easter 1\"\n },\n \"05-23 if saturday,sunday then next monday\": {\n \"_name\": \"05-01\"\n },\n \"08-01 if sunday then next monday\": {\n \"name\": {\n \"en\": \"Emancipation Day\"\n }\n },\n \"08-06 and if sunday then next monday\": {\n \"_name\": \"Independence Day\",\n \"substitute\": true\n },\n \"3rd monday in October\": {\n \"name\": {\n \"en\": \"National Heroes Day\"\n }\n },\n \"12-25 and if sunday then next tuesday\": {\n \"_name\": \"12-25\",\n \"substitute\": true\n },\n \"12-26 and if sunday then next monday\": {\n \"_name\": \"12-26\",\n \"substitute\": true\n }\n }\n },\n \"JP\": {\n \"names\": {\n \"jp\": \"\u65E5\u672C\",\n \"en\": \"Japan\"\n },\n \"dayoff\": \"sunday\",\n \"langs\": [\n \"jp\"\n ],\n \"zones\": [\n \"Asia/Tokyo\"\n ],\n \"days\": {\n \"01-01\": {\n \"_name\": \"01-01\"\n },\n \"substitutes 01-01 if sunday then next monday\": {\n \"substitute\": true,\n \"_name\": \"01-01\",\n \"active\": [\n {\n \"from\": \"1973-04-12T00:00:00.000Z\"\n }\n ]\n },\n \"01-02\": {\n \"name\": {\n \"en\": \"January 2nd\",\n \"jp\": \"\u9280\u884C\u4F11\u696D\u65E5\"\n },\n \"type\": \"bank\"\n },\n \"01-03\": {\n \"name\": {\n \"en\": \"January 3rd\",\n \"jp\": \"\u9280\u884C\u4F11\u696D\u65E5\"\n },\n \"type\": \"bank\"\n },\n \"01-15\": {\n \"name\": {\n \"en\": \"Coming of Age Day\",\n \"jp\": \"\u6210\u4EBA\u306E\u65E5\"\n },\n \"active\": [\n {\n \"from\": \"1948-07-20T00:00:00.000Z\",\n \"to\": \"1999-12-31T00:00:00.000Z\"\n }\n ]\n },\n \"substitutes 01-15 and if sunday then next monday\": {\n \"substitute\": true,\n \"name\": {\n \"en\": \"Coming of Age Day\",\n \"jp\": \"\u6210\u4EBA\u306E\u65E5\"\n },\n \"active\": [\n {\n \"from\": \"1973-04-12T00:00:00.000Z\",\n \"to\": \"1999-12-31T00:00:00.000Z\"\n }\n ]\n },\n \"2nd monday in January\": {\n \"name\": {\n \"en\": \"Coming of Age Day\",\n \"jp\": \"\u6210\u4EBA\u306E\u65E5\"\n },\n \"active\": [\n {\n \"from\": \"2000-01-01T00:00:00.000Z\"\n }\n ]\n },\n \"02-11\": {\n \"name\": {\n \"en\": \"Foundation Day\",\n \"jp\": \"\u5EFA\u56FD\u8A18\u5FF5\u306E\u65E5\"\n },\n \"active\": [\n {\n \"from\": \"1967-01-01T00:00:00.000Z\"\n }\n ]\n },\n \"substitutes 02-11 and if sunday then next monday\": {\n \"substitute\": true,\n \"name\": {\n \"en\": \"Foundation Day\",\n \"jp\": \"\u5EFA\u56FD\u8A18\u5FF5\u306E\u65E5\"\n },\n \"active\": [\n {\n \"from\": \"1973-04-12T00:00:00.000Z\"\n }\n ]\n },\n \"02-23 and if sunday then next monday\": {\n \"substitute\": true,\n \"name\": {\n \"en\": \"Emperor's Birthday\",\n \"jp\": \"\u5929\u7687\u8A95\u751F\u65E5\"\n },\n \"active\": [\n {\n \"from\": \"2020-01-01T00:00:00.000Z\"\n }\n ]\n },\n \"1989-02-24\": {\n \"name\": {\n \"en\": \"State Funeral of Emperor Showa\",\n \"jp\": \"\u5927\u55AA\u306E\u793C\"\n }\n },\n \"march equinox in +09:00\": {\n \"name\": {\n \"en\": \"Spring Equinox Day\",\n \"jp\": \"\u6625\u5206\u306E\u65E5\"\n },\n \"active\": [\n {\n \"from\": \"1948-07-20T00:00:00.000Z\"\n }\n ]\n },\n \"substitutes march equinox in +09:00 and if sunday then next monday\": {\n \"substitute\": true,\n \"name\": {\n \"en\": \"Spring Equinox Day\",\n \"jp\": \"\u6625\u5206\u306E\u65E5\"\n },\n \"active\": [\n {\n \"from\": \"1973-04-12T00:00:00.000Z\"\n }\n ]\n },\n \"1959-04-10\": {\n \"name\": {\n \"en\": \"Marriage of Crown Prince Akihito\",\n \"jp\": \"\u7D50\u5A5A\u306E\u5100\"\n }\n },\n \"04-29\": {\n \"name\": {\n \"en\": \"Emperor's Birthday\",\n \"jp\": \"\u5929\u7687\u8A95\u751F\u65E5\"\n },\n \"active\": [\n {\n \"from\": \"1948-07-20T00:00:00.000Z\",\n \"to\": \"1988-12-31T00:00:00.000Z\"\n }\n ]\n },\n \"substitutes 04-29 and if sunday then next monday\": {\n \"substitute\": true,\n \"name\": {\n \"en\": \"Emperor's Birthday\",\n \"jp\": \"\u5929\u7687\u8A95\u751F\u65E5\"\n },\n \"active\": [\n {\n \"from\": \"1973-04-12T00:00:00.000Z\",\n \"to\": \"1988-12-31T00:00:00.000Z\"\n }\n ]\n },\n \"04-29 and if sunday then next monday #1\": {\n \"substitute\": true,\n \"name\": {\n \"en\": \"Greenery Day\",\n \"jp\": \"\u307F\u3069\u308A\u306E\u65E5\"\n },\n \"active\": [\n {\n \"from\": \"1989-01-01T00:00:00.000Z\",\n \"to\": \"2006-12-31T00:00:00.000Z\"\n }\n ]\n },\n \"04-29 and if sunday then next monday #2\": {\n \"substitute\": true,\n \"name\": {\n \"en\": \"Showa Day\",\n \"jp\": \"\u662D\u548C\u306E\u65E5\"\n },\n \"active\": [\n {\n \"from\": \"2007-01-01T00:00:00.000Z\"\n }\n ]\n },\n \"2019-04-30\": {\n \"name\": {\n \"en\": \"Citizens' Holiday\",\n \"jp\": \"\u56FD\u6C11\u306E\u4F11\u65E5\"\n }\n },\n \"2019-05-01\": {\n \"name\": {\n \"en\": \"Coronation Day\",\n \"jp\": \"\u5373\u4F4D\u306E\u65E5\"\n }\n },\n \"2019-05-02\": {\n \"name\": {\n \"en\": \"Citizens' Holiday\",\n \"jp\": \"\u56FD\u6C11\u306E\u4F11\u65E5\"\n }\n },\n \"05-03\": {\n \"_name\": \"Constitution Day\"\n },\n \"substitutes 05-03 if sunday then next monday\": {\n \"substitute\": true,\n \"_name\": \"Constitution Day\",\n \"active\": [\n {\n \"from\": \"1973-04-12T00:00:00.000Z\",\n \"to\": \"2006-12-31T00:00:00.000Z\"\n }\n ]\n },\n \"substitutes 05-03 if sunday then next wednesday\": {\n \"substitute\": true,\n \"_name\": \"Constitution Day\",\n \"active\": [\n {\n \"from\": \"2007-01-01T00:00:00.000Z\"\n }\n ]\n },\n \"05-04 not on sunday, monday\": {\n \"name\": {\n \"en\": \"Citizens' Holiday\",\n \"jp\": \"\u56FD\u6C11\u306E\u4F11\u65E5\"\n },\n \"active\": [\n {\n \"from\": \"1986-01-01T00:00:00.000Z\",\n \"to\": \"2006-12-31T00:00:00.000Z\"\n }\n ]\n },\n \"05-04 and if sunday then next tuesday\": {\n \"substitute\": true,\n \"name\": {\n \"en\": \"Greenery Day\",\n \"jp\": \"\u307F\u3069\u308A\u306E\u65E5\"\n },\n \"active\": [\n {\n \"from\": \"2007-01-01T00:00:00.000Z\"\n }\n ]\n },\n \"05-05\": {\n \"name\": {\n \"en\": \"Children's Day\",\n \"jp\": \"\u3053\u3069\u3082\u306E\u65E5\"\n }\n },\n \"substitutes 05-05 if sunday then next monday\": {\n \"substitute\": true,\n \"name\": {\n \"en\": \"Children's Day\",\n \"jp\": \"\u3053\u3069\u3082\u306E\u65E5\"\n },\n \"active\": [\n {\n \"from\": \"1973-04-12T00:00:00.000Z\"\n }\n ]\n },\n \"1993-06-09\": {\n \"name\": {\n \"en\": \"Marriage of Crown Prince Naruhito\",\n \"jp\": \"\u7D50\u5A5A\u306E\u5100\"\n }\n },\n \"07-20\": {\n \"name\": {\n \"en\": \"Marine Day\",\n \"jp\": \"\u6D77\u306E\u65E5\"\n },\n \"active\": [\n {\n \"from\": \"1996-01-01T00:00:00.000Z\",\n \"to\": \"2002-12-31T00:00:00.000Z\"\n }\n ]\n },\n \"substitutes 07-20 if sunday then next monday\": {\n \"substitute\": true,\n \"name\": {\n \"en\": \"Marine Day\",\n \"jp\": \"\u6D77\u306E\u65E5\"\n },\n \"active\": [\n {\n \"from\": \"1996-01-01T00:00:00.000Z\",\n \"to\": \"2002-12-31T00:00:00.000Z\"\n }\n ]\n },\n \"3rd monday in July\": {\n \"name\": {\n \"en\": \"Marine Day\",\n \"jp\": \"\u6D77\u306E\u65E5\"\n },\n \"disable\": [\n \"2020-07-20\",\n \"2021-07-19\"\n ],\n \"enable\": [\n \"2020-07-23\",\n \"2021-07-22\"\n ],\n \"active\": [\n {\n \"from\": \"2003-01-01T00:00:00.000Z\"\n }\n ]\n },\n \"substitutes 2021-08-08 and if sunday then next monday\": {\n \"substitute\": true,\n \"name\": {\n \"en\": \"Mountain Day\",\n \"jp\": \"\u5C71\u306E\u65E5\"\n }\n },\n \"substitutes 08-11 and if sunday then next monday\": {\n \"substitute\": true,\n \"name\": {\n \"en\": \"Mountain Day\",\n \"jp\": \"\u5C71\u306E\u65E5\"\n },\n \"disable\": [\n \"2020-08-11\",\n \"2021-08-11\"\n ],\n \"enable\": [\n \"2020-08-10\"\n ],\n \"active\": [\n {\n \"from\": \"2016-01-01T00:00:00.000Z\"\n }\n ]\n },\n \"09-15\": {\n \"name\": {\n \"en\": \"Respect-for-the-Aged Day\",\n \"jp\": \"\u656C\u8001\u306E\u65E5\"\n },\n \"active\": [\n {\n \"from\": \"1966-01-01T00:00:00.000Z\",\n \"to\": \"2002-12-31T00:00:00.000Z\"\n }\n ]\n },\n \"substitutes 09-15 and if sunday then next monday\": {\n \"substitute\": true,\n \"name\": {\n \"en\": \"Respect-for-the-Aged Day\",\n \"jp\": \"\u656C\u8001\u306E\u65E5\"\n },\n \"active\": [\n {\n \"from\": \"1973-04-12T00:00:00.000Z\",\n \"to\": \"2002-12-31T00:00:00.000Z\"\n }\n ]\n },\n \"3rd monday in September\": {\n \"name\": {\n \"en\": \"Respect-for-the-Aged Day\",\n \"jp\": \"\u656C\u8001\u306E\u65E5\"\n },\n \"active\": [\n {\n \"from\": \"2003-01-01T00:00:00.000Z\"\n }\n ]\n },\n \"09-22 if 09-21 and 09-23 is public holiday\": {\n \"name\": {\n \"en\": \"Citizens' Holiday\",\n \"jp\": \"\u56FD\u6C11\u306E\u4F11\u65E5\"\n }\n },\n \"september equinox in +09:00\": {\n \"name\": {\n \"en\": \"Autumnal Equinox Day\",\n \"jp\": \"\u79CB\u5206\u306E\u65E5\"\n },\n \"active\": [\n {\n \"from\": \"1948-07-20T00:00:00.000Z\"\n }\n ]\n },\n \"substitutes september equinox in +09:00 and if sunday then next monday\": {\n \"substitute\": true,\n \"name\": {\n \"en\": \"Autumnal Equinox Day\",\n \"jp\": \"\u79CB\u5206\u306E\u65E5\"\n },\n \"active\": [\n {\n \"from\": \"1973-04-12T00:00:00.000Z\"\n }\n ]\n },\n \"10-10\": {\n \"name\": {\n \"en\": \"Sports Day\",\n \"jp\": \"\u4F53\u80B2\u306E\u65E5\"\n },\n \"active\": [\n {\n \"from\": \"1966-01-01T00:00:00.000Z\",\n \"to\": \"1999-12-31T00:00:00.000Z\"\n }\n ]\n },\n \"substitutes 10-10 and if sunday then next monday\": {\n \"substitute\": true,\n \"name\": {\n \"en\": \"Sports Day\",\n \"jp\": \"\u4F53\u80B2\u306E\u65E5\"\n },\n \"active\": [\n {\n \"from\": \"1973-04-12T00:00:00.000Z\",\n \"to\": \"1999-12-31T00:00:00.000Z\"\n }\n ]\n },\n \"2nd monday in October #1\": {\n \"name\": {\n \"en\": \"Sports Day\",\n \"jp\": \"\u4F53\u80B2\u306E\u65E5\"\n },\n \"active\": [\n {\n \"from\": \"2000-01-01T00:00:00.000Z\",\n \"to\": \"2019-12-31T00:00:00.000Z\"\n }\n ]\n },\n \"2nd monday in October #2\": {\n \"name\": {\n \"en\": \"Sports Day\",\n \"jp\": \"\u30B9\u30DD\u30FC\u30C4\u306E\u65E5\"\n },\n \"disable\": [\n \"2020-10-12\",\n \"2021-10-11\"\n ],\n \"enable\": [\n \"2020-07-24\",\n \"2021-07-23\"\n ],\n \"active\": [\n {\n \"from\": \"2020-01-01T00:00:00.000Z\"\n }\n ]\n },\n \"2019-10-22\": {\n \"name\": {\n \"en\": \"Enthronement Ceremony Day\",\n \"jp\": \"\u5373\u4F4D\u793C\u6B63\u6BBF\u306E\u5100\"\n }\n },\n \"11-03\": {\n \"substitute\": true,\n \"name\": {\n \"en\": \"Culture Day\",\n \"jp\": \"\u6587\u5316\u306E\u65E5\"\n },\n \"active\": [\n {\n \"from\": \"1948-07-20T00:00:00.000Z\"\n }\n ]\n },\n \"substitutes 11-03 and if sunday then next monday\": {\n \"substitute\": true,\n \"name\": {\n \"en\": \"Culture Day\",\n \"jp\": \"\u6587\u5316\u306E\u65E5\"\n },\n \"active\": [\n {\n \"from\": \"1973-04-12T00:00:00.000Z\"\n }\n ]\n },\n \"1990-11-12\": {\n \"name\": {\n \"en\": \"Official Enthronement Ceremony of Emperor Heisei (Akihito)\",\n \"jp\": \"\u5373\u4F4D\u793C\u6B63\u6BBF\u306E\u5100\"\n }\n },\n \"11-15\": {\n \"name\": {\n \"en\": \"Seven-Five-Three Festival\",\n \"jp\": \"\u4E03\u4E94\u4E09\"\n },\n \"type\": \"observance\"\n },\n \"11-23\": {\n \"name\": {\n \"en\": \"Labor Thanksgiving Day\",\n \"jp\": \"\u52E4\u52B4\u611F\u8B1D\u306E\u65E5\"\n },\n \"active\": [\n {\n \"from\": \"1948-07-20T00:00:00.000Z\"\n }\n ]\n },\n \"substitutes 11-23 and if sunday then next monday\": {\n \"substitute\": true,\n \"name\": {\n \"en\": \"Labor Thanksgiving Day\",\n \"jp\": \"\u52E4\u52B4\u611F\u8B1D\u306E\u65E5\"\n },\n \"active\": [\n {\n \"from\": \"1973-04-12T00:00:00.000Z\"\n }\n ]\n },\n \"12-23 and if sunday then next monday\": {\n \"substitute\": true,\n \"name\": {\n \"en\": \"Emperor's Birthday\",\n \"jp\": \"\u5929\u7687\u8A95\u751F\u65E5\"\n },\n \"active\": [\n {\n \"from\": \"1989-01-01T00:00:00.000Z\",\n \"to\": \"2018-12-31T00:00:00.000Z\"\n }\n ]\n },\n \"12-25\": {\n \"_name\": \"12-25\",\n \"type\": \"observance\"\n },\n \"12-31\": {\n \"_name\": \"12-31\",\n \"type\": \"bank\"\n }\n }\n },\n \"KE\": {\n \"names\": {\n \"en\": \"Kenya\"\n },\n \"dayoff\": \"sunday\",\n \"langs\": [\n \"sw\",\n \"en\"\n ],\n \"zones\": [\n \"Africa/Nairobi\"\n ],\n \"days\": {\n \"01-01 and if sunday then next monday\": {\n \"substitute\": true,\n \"_name\": \"01-01\"\n },\n \"easter -2\": {\n \"_name\": \"easter -2\"\n },\n \"easter\": {\n \"_name\": \"easter\"\n },\n \"easter 1\": {\n \"_name\": \"easter 1\"\n },\n \"05-01 and if sunday then next monday\": {\n \"substitute\": true,\n \"_name\": \"05-01\"\n },\n \"06-01 and if sunday then next monday\": {\n \"substitute\": true,\n \"name\": {\n \"sw\": \"Siku ya Madaraka\",\n \"en\": \"Madaraka Day\"\n }\n },\n \"10-10 and if sunday then next monday\": {\n \"substitute\": true,\n \"name\": {\n \"en\": \"Moi Day\"\n }\n },\n \"10-20 and if sunday then next monday\": {\n \"substitute\": true,\n \"name\": {\n \"sw\": \"Siku ya Mashujaa\",\n \"en\": \"Mashujaa Day\"\n }\n },\n \"12-12 and if sunday then next monday\": {\n \"substitute\": true,\n \"name\": {\n \"sw\": \"Siku ya Jamhuri\",\n \"en\": \"Jamhuri Day\"\n }\n },\n \"12-25 and if sunday then next tuesday\": {\n \"substitute\": true,\n \"_name\": \"12-25\"\n },\n \"12-26 and if sunday then next monday\": {\n \"substitute\": true,\n \"_name\": \"12-26\"\n },\n \"1 Shawwal\": {\n \"_name\": \"1 Shawwal\"\n },\n \"10 Dhu al-Hijjah\": {\n \"_name\": \"10 Dhu al-Hijjah\",\n \"note\": \"For all persons belonging to the Islamic faith.\"\n }\n }\n },\n \"KM\": {\n \"names\": {\n \"fr\": \"Union des Comores\",\n \"en\": \"Comoros\"\n },\n \"langs\": [\n \"fr\",\n \"ar\",\n \"swb\",\n \"wlc\",\n \"wni\",\n \"zdj\"\n ],\n \"zones\": [\n \"Africa/Nairobi\"\n ],\n \"dayoff\": \"sunday\",\n \"days\": {\n \"01-01\": {\n \"_name\": \"01-01\"\n },\n \"03-18\": {\n \"name\": {\n \"fr\": \"Journ\u00E9e de Cheikh Al Maarouf\",\n \"en\": \"Cheikh Al Maarouf Day\"\n }\n },\n \"05-01\": {\n \"_name\": \"05-01\"\n },\n \"07-06\": {\n \"_name\": \"Independence Day\"\n },\n \"11-12\": {\n \"name\": {\n \"fr\": \"Journ\u00E9e Maor\u00E9\",\n \"en\": \"Maore Day\"\n }\n },\n \"1 Muharram\": {\n \"_name\": \"1 Muharram\"\n },\n \"12 Rabi al-awwal\": {\n \"_name\": \"12 Rabi al-awwal\"\n },\n \"1 Shawwal P3DT0H0M\": {\n \"_name\": \"1 Shawwal\"\n },\n \"10 Dhu al-Hijjah P2DT0H0M\": {\n \"_name\": \"10 Dhu al-Hijjah\"\n },\n \"27 Rajab\": {\n \"_name\": \"27 Rajab\"\n }\n }\n },\n \"KN\": {\n \"names\": {\n \"en\": \"St. Kitts & Nevis\"\n },\n \"langs\": [\n \"en\"\n ],\n \"zones\": [\n \"America/Port_of_Spain\"\n ],\n \"dayoff\": \"sunday\",\n \"days\": {\n \"01-01 and if Saturday then next Monday\": {\n \"substitute\": true,\n \"_name\": \"01-01\"\n },\n \"01-02\": {\n \"name\": {\n \"en\": \"Carnival Day\"\n }\n },\n \"easter -2\": {\n \"_name\": \"easter -2\"\n },\n \"easter\": {\n \"_name\": \"easter\",\n \"type\": \"observance\"\n },\n \"easter 1\": {\n \"_name\": \"easter 1\"\n },\n \"easter 49\": {\n \"_name\": \"easter 49\",\n \"type\": \"observance\"\n },\n \"easter 50\": {\n \"_name\": \"easter 50\"\n },\n \"1st Monday in May\": {\n \"_name\": \"05-01\"\n },\n \"1st Monday in August\": {\n \"name\": {\n \"en\": \"Emancipation Day\"\n }\n },\n \"1st Tuesday in August\": {\n \"name\": {\n \"en\": \"Culturama Day\"\n }\n },\n \"09-16 and if Sunday then next Monday\": {\n \"substitute\": true,\n \"name\": {\n \"en\": \"National Heroes' Day\"\n }\n },\n \"09-19 if Sunday then next Monday\": {\n \"substitute\": true,\n \"_name\": \"Independence Day\"\n },\n \"12-25\": {\n \"_name\": \"12-25\"\n },\n \"12-26\": {\n \"_name\": \"12-26\"\n }\n }\n },\n \"KR\": {\n \"names\": {\n \"ko\": \"\uB300\uD55C\uBBFC\uAD6D\",\n \"en\": \"South Korea\"\n },\n \"dayoff\": \"sunday\",\n \"langs\": [\n \"ko\"\n ],\n \"zones\": [\n \"Asia/Seoul\"\n ],\n \"days\": {\n \"01-01\": {\n \"_name\": \"01-01\"\n },\n \"korean 01-0-01 P3D\": {\n \"name\": {\n \"en\": \"Korean New Year\",\n \"ko\": \"\uC124\uB0A0\"\n }\n },\n \"03-01\": {\n \"name\": {\n \"en\": \"Independence Movement Day\",\n \"ko\": \"3\u00B71\uC808\"\n }\n },\n \"05-05\": {\n \"name\": {\n \"en\": \"Children's Day\",\n \"ko\": \"\uC5B4\uB9B0\uC774\uB0A0\"\n }\n },\n \"korean 4-0-8\": {\n \"name\": {\n \"en\": \"Buddha's Birthday\",\n \"ko\": \"\uC11D\uAC00\uD0C4\uC2E0\uC77C\"\n }\n },\n \"06-06\": {\n \"name\": {\n \"en\": \"Memorial Day\",\n \"ko\": \"\uD604\uCDA9\uC77C\"\n }\n },\n \"07-17\": {\n \"_name\": \"Constitution Day\",\n \"type\": \"observance\"\n },\n \"08-15\": {\n \"name\": {\n \"en\": \"Liberation Day\",\n \"ko\": \"\uAD11\uBCF5\uC808\"\n }\n },\n \"korean 8-0-15 P3D\": {\n \"name\": {\n \"en\": \"Korean Thanksgiving\",\n \"ko\": \"\uCD94\uC11D\"\n }\n },\n \"10-03\": {\n \"name\": {\n \"en\": \"National Foundation Day\",\n \"ko\": \"\uAC1C\uCC9C\uC808\"\n }\n },\n \"10-09\": {\n \"name\": {\n \"en\": \"Hangul Day\",\n \"ko\": \"\uD55C\uAE00\uB0A0\"\n }\n },\n \"12-25\": {\n \"_name\": \"12-25\"\n }\n }\n },\n \"KY\": {\n \"names\": {\n \"en\": \"Cayman Islands\"\n },\n \"langs\": [\n \"en\"\n ],\n \"zones\": [\n \"America/Panama\"\n ],\n \"dayoff\": \"sunday\",\n \"days\": {\n \"01-01 and if Saturday, Sunday then next Monday\": {\n \"substitute\": true,\n \"_name\": \"01-01\"\n },\n \"4th Monday in January\": {\n \"name\": {\n \"en\": \"National Heroes Day\"\n }\n },\n \"easter -46\": {\n \"_name\": \"easter -46\"\n },\n \"easter -2\": {\n \"_name\": \"easter -2\"\n },\n \"easter\": {\n \"_name\": \"easter\",\n \"type\": \"observance\"\n },\n \"easter 1\": {\n \"_name\": \"easter 1\"\n },\n \"3rd Monday in May\": {\n \"name\": {\n \"en\": \"Discovery Day\"\n }\n },\n \"07-02\": {\n \"name\": {\n \"en\": \"Constitution Day\"\n }\n },\n \"12-25\": {\n \"_name\": \"12-25\"\n },\n \"12-26\": {\n \"_name\": \"12-26\"\n },\n \"2017-05-24\": {\n \"name\": \"General Election Day\"\n },\n \"2021-04-14\": {\n \"name\": \"General Election Day\"\n },\n \"2016-06-13\": {\n \"name\": {\n \"en\": \"Queen's Birthday\"\n }\n },\n \"2017-06-19\": {\n \"name\": {\n \"en\": \"Queen's Birthday\"\n }\n },\n \"2018-06-11\": {\n \"name\": {\n \"en\": \"Queen's Birthday\"\n }\n },\n \"2019-06-10\": {\n \"name\": {\n \"en\": \"Queen's Birthday\"\n }\n },\n \"2020-06-15\": {\n \"name\": {\n \"en\": \"Queen's Birthday\"\n }\n },\n \"2021-06-14\": {\n \"name\": {\n \"en\": \"Queen's Birthday\"\n }\n },\n \"2022-06-20\": {\n \"name\": {\n \"en\": \"Queen's Birthday\"\n }\n },\n \"2023-06-19\": {\n \"name\": {\n \"en\": \"Queen's Birthday\"\n }\n },\n \"2024-06-17\": {\n \"name\": {\n \"en\": \"Queen's Birthday\"\n }\n },\n \"2025-06-16\": {\n \"name\": {\n \"en\": \"Queen's Birthday\"\n }\n },\n \"2026-06-15\": {\n \"name\": {\n \"en\": \"Queen's Birthday\"\n }\n }\n }\n },\n \"LC\": {\n \"names\": {\n \"en\": \"St. Lucia\"\n },\n \"langs\": [\n \"en\"\n ],\n \"zones\": [\n \"America/Port_of_Spain\"\n ],\n \"dayoff\": \"sunday\",\n \"days\": {\n \"01-01\": {\n \"_name\": \"01-01\"\n },\n \"01-02\": {\n \"name\": {\n \"en\": \"Second New Year's Day\"\n }\n },\n \"02-22\": {\n \"_name\": \"Independence Day\"\n },\n \"easter -2\": {\n \"_name\": \"easter -2\"\n },\n \"easter 1\": {\n \"_name\": \"easter 1\"\n },\n \"05-01\": {\n \"_name\": \"05-01\"\n },\n \"easter 50\": {\n \"_name\": \"easter 50\"\n },\n \"easter 60\": {\n \"_name\": \"easter 60\"\n },\n \"1st Friday after 07-10 P4D\": {\n \"name\": {\n \"en\": \"Carnival\"\n }\n },\n \"08-01\": {\n \"name\": {\n \"en\": \"Emancipation Day\"\n }\n },\n \"1st Monday in October\": {\n \"name\": {\n \"en\": \"Thanksgiving\"\n }\n },\n \"12-13\": {\n \"name\": {\n \"en\": \"National Day\"\n }\n },\n \"12-25\": {\n \"_name\": \"12-25\"\n },\n \"12-26\": {\n \"_name\": \"12-26\"\n }\n }\n },\n \"LI\": {\n \"names\": {\n \"de\": \"Lichtenstein\",\n \"en\": \"Lichtenstein\"\n },\n \"dayoff\": \"sunday\",\n \"langs\": [\n \"de\"\n ],\n \"zones\": [\n \"Europe/Zurich\"\n ],\n \"days\": {\n \"01-01\": {\n \"_name\": \"01-01\"\n },\n \"01-02\": {\n \"name\": {\n \"de\": \"Berchtoldstag\",\n \"en\": \"Berchtold Day\"\n },\n \"type\": \"bank\"\n },\n \"01-06\": {\n \"_name\": \"01-06\"\n },\n \"02-02\": {\n \"_name\": \"02-02\",\n \"type\": \"observance\"\n },\n \"03-19\": {\n \"_name\": \"03-19\",\n \"type\": \"observance\"\n },\n \"easter -47\": {\n \"_name\": \"easter -47\",\n \"type\": \"bank\"\n },\n \"easter -2\": {\n \"_name\": \"easter -2\"\n },\n \"easter\": {\n \"_name\": \"easter\",\n \"type\": \"observance\"\n },\n \"easter 1\": {\n \"_name\": \"easter 1\"\n },\n \"05-01\": {\n \"_name\": \"05-01\"\n },\n \"2nd sunday in May\": {\n \"_name\": \"Mothers Day\",\n \"type\": \"observance\"\n },\n \"easter 39\": {\n \"_name\": \"easter 39\",\n \"name\": {\n \"de\": \"Auffahrt\"\n }\n },\n \"easter 40\": {\n \"name\": {\n \"de\": \"Feiertagsbr\u00FCcke\"\n }\n },\n \"easter 49\": {\n \"_name\": \"easter 49\",\n \"type\": \"observance\"\n },\n \"easter 50\": {\n \"_name\": \"easter 50\"\n },\n \"easter 60\": {\n \"_name\": \"easter 60\"\n },\n \"easter 61\": {\n \"name\": {\n \"de\": \"Feiertagsbr\u00FCcke\"\n }\n },\n \"08-15\": {\n \"name\": {\n \"de\": \"Staatsfeiertag\"\n },\n \"type\": \"observance\"\n },\n \"09-08\": {\n \"name\": {\n \"de\": \"Mari\u00E4 Geburt\"\n }\n },\n \"11-01\": {\n \"_name\": \"11-01\",\n \"type\": \"observance\"\n },\n \"12-08\": {\n \"_name\": \"12-08\"\n },\n \"12-24\": {\n \"_name\": \"12-24\",\n \"type\": \"bank\"\n },\n \"12-25\": {\n \"_name\": \"12-25\"\n },\n \"12-26\": {\n \"_name\": \"12-26\",\n \"name\": {\n \"de\": \"Stephanstag\"\n }\n },\n \"12-31\": {\n \"_name\": \"12-31\",\n \"type\": \"bank\"\n }\n }\n },\n \"LR\": {\n \"names\": {\n \"en\": \"Liberia\"\n },\n \"langs\": [\n \"en\"\n ],\n \"zones\": [\n \"Africa/Monrovia\"\n ],\n \"dayoff\": \"Sunday\",\n \"days\": {\n \"01-01\": {\n \"_name\": \"01-01\"\n },\n \"02-11\": {\n \"name\": {\n \"en\": \"Armed Forces Day\"\n }\n },\n \"2nd Wednesday in March\": {\n \"name\": {\n \"en\": \"Decoration Day\"\n }\n },\n \"03-15\": {\n \"name\": {\n \"en\": \"J. J. Robert's Day\"\n }\n },\n \"2nd Friday in April\": {\n \"name\": {\n \"en\": \"Fast and Prayer Day\"\n }\n },\n \"05-14\": {\n \"name\": {\n \"en\": \"National Unification Day\"\n }\n },\n \"07-26\": {\n \"_name\": \"Independence Day\"\n },\n \"08-24\": {\n \"name\": {\n \"en\": \"Flag Day\"\n }\n },\n \"1st Thursday in November\": {\n \"name\": {\n \"en\": \"Thanksgiving\"\n }\n },\n \"11-29\": {\n \"name\": {\n \"en\": \"William Tubman's Birthday\"\n }\n },\n \"12-25\": {\n \"_name\": \"12-25\"\n }\n }\n },\n \"LS\": {\n \"names\": {\n \"st\": \"\\\\'Muso oa Lesotho\",\n \"en\": \"Lesotho\"\n },\n \"langs\": [\n \"st\",\n \"en\"\n ],\n \"zones\": [\n \"Africa/Johannesburg\"\n ],\n \"dayoff\": \"sunday\",\n \"days\": {\n \"01-01\": {\n \"_name\": \"01-01\"\n },\n \"03-11\": {\n \"name\": {\n \"en\": \"Moshoeshoe Day\"\n }\n },\n \"easter -2\": {\n \"_name\": \"easter -2\"\n },\n \"easter 1\": {\n \"_name\": \"easter 1\"\n },\n \"05-01\": {\n \"_name\": \"05-01\",\n \"name\": {\n \"en\": \"Workers' Day\"\n }\n },\n \"easter 39\": {\n \"_name\": \"easter 39\"\n },\n \"05-25\": {\n \"name\": {\n \"en\": \"Africa Day/ Heroes' Day\"\n }\n },\n \"07-17\": {\n \"name\": {\n \"en\": \"King Letsie III's Birthday\"\n }\n },\n \"10-04\": {\n \"_name\": \"Independence Day\"\n },\n \"12-25\": {\n \"_name\": \"12-25\"\n },\n \"12-26\": {\n \"_name\": \"12-26\"\n }\n }\n },\n \"LT\": {\n \"names\": {\n \"lt\": \"Lietuva\",\n \"en\": \"Lithuania\"\n },\n \"dayoff\": \"sunday\",\n \"langs\": [\n \"lt\"\n ],\n \"zones\": [\n \"Europe/Vilnius\"\n ],\n \"days\": {\n \"01-01\": {\n \"_name\": \"01-01\"\n },\n \"02-16\": {\n \"name\": {\n \"en\": \"Day of Restoration of the State of Lithuania\",\n \"lt\": \"Lietuvos valstyb\u0117s atk\u016Brimo diena\"\n }\n },\n \"03-11\": {\n \"name\": {\n \"en\": \"Day of Restoration of Independence of Lithuania\",\n \"lt\": \"Lietuvos nepriklausomyb\u0117s atk\u016Brimo diena\"\n }\n },\n \"easter\": {\n \"_name\": \"easter\"\n },\n \"05-01\": {\n \"_name\": \"05-01\"\n },\n \"1st sunday in May\": {\n \"_name\": \"Mothers Day\",\n \"type\": \"observance\"\n },\n \"1st sunday in June\": {\n \"_name\": \"Fathers Day\",\n \"type\": \"observance\"\n },\n \"06-24\": {\n \"name\": {\n \"en\": \"St. John's Day\",\n \"lt\": \"Jonin\u0117s, Rasos\"\n }\n },\n \"07-06\": {\n \"name\": {\n \"en\": \"Statehood Day\",\n \"lt\": \"Valstyb\u0117s diena\"\n }\n },\n \"08-15\": {\n \"_name\": \"08-15\"\n },\n \"11-01\": {\n \"_name\": \"11-01\"\n },\n \"11-02\": {\n \"_name\": \"11-02\",\n \"active\": [\n {\n \"from\": 2020\n }\n ]\n },\n \"12-24\": {\n \"_name\": \"12-24\"\n },\n \"12-25\": {\n \"_name\": \"12-25\"\n },\n \"12-26\": {\n \"_name\": \"12-26\"\n }\n }\n },\n \"LU\": {\n \"names\": {\n \"fr\": \"Luxembourg\",\n \"en\": \"Luxembourg\"\n },\n \"langs\": [\n \"fr\"\n ],\n \"zones\": [\n \"Europe/Luxembourg\"\n ],\n \"days\": {\n \"01-01\": {\n \"_name\": \"01-01\"\n },\n \"easter -2\": {\n \"_name\": \"easter -2\",\n \"type\": \"observance\"\n },\n \"easter\": {\n \"_name\": \"easter\",\n \"type\": \"observance\"\n },\n \"easter 1\": {\n \"_name\": \"easter 1\"\n },\n \"05-01\": {\n \"_name\": \"05-01\",\n \"name\": {\n \"fr\": \"1er mai\"\n }\n },\n \"05-09\": {\n \"_name\": \"05-09\",\n \"active\": [\n {\n \"from\": \"2019-01-01\"\n }\n ]\n },\n \"easter 39\": {\n \"_name\": \"easter 39\"\n },\n \"easter 50\": {\n \"_name\": \"easter 50\"\n },\n \"06-23\": {\n \"name\": {\n \"fr\": \"L\u2019anniversaire du Grand-Duc\"\n }\n },\n \"08-15\": {\n \"_name\": \"08-15\"\n },\n \"11-01\": {\n \"_name\": \"11-01\"\n },\n \"12-25\": {\n \"_name\": \"12-25\"\n },\n \"12-26\": {\n \"_name\": \"12-26\"\n }\n }\n },\n \"LV\": {\n \"names\": {\n \"lv\": \"Latvija\",\n \"en\": \"Latvia\"\n },\n \"dayoff\": \"sunday\",\n \"langs\": [\n \"lv\"\n ],\n \"zones\": [\n \"Europe/Riga\"\n ],\n \"days\": {\n \"01-01\": {\n \"_name\": \"01-01\"\n },\n \"easter -2\": {\n \"_name\": \"easter -2\"\n },\n \"easter\": {\n \"_name\": \"easter\"\n },\n \"easter 1\": {\n \"_name\": \"easter 1\"\n },\n \"05-01\": {\n \"_name\": \"05-01\"\n },\n \"05-04 and if saturday,sunday then next monday\": {\n \"substitute\": true,\n \"name\": {\n \"en\": \"Restoration of Independence day\",\n \"lv\": \"Latvijas Republikas Neatkar\u012Bbas atjauno\u0161anas diena\"\n }\n },\n \"2nd sunday in May\": {\n \"_name\": \"Mothers Day\",\n \"type\": \"observance\"\n },\n \"06-23\": {\n \"name\": {\n \"en\": \"Midsummer Eve\",\n \"lv\": \"L\u012Bgo Diena\"\n }\n },\n \"06-24\": {\n \"name\": {\n \"en\": \"Midsummer\",\n \"lv\": \"J\u0101\u0146i\"\n }\n },\n \"11-18 and if saturday,sunday then next monday\": {\n \"substitute\": true,\n \"name\": {\n \"en\": \"Republic Day\",\n \"lv\": \"Latvijas Republikas proklam\u0113\u0161anas diena\"\n }\n },\n \"12-24\": {\n \"_name\": \"12-24\"\n },\n \"12-25\": {\n \"_name\": \"12-25\"\n },\n \"12-26\": {\n \"_name\": \"12-26\"\n },\n \"12-31\": {\n \"_name\": \"12-31\"\n }\n }\n },\n \"LY\": {\n \"names\": {\n \"ar\": \"\u062F\u0648\u0644\u0629 \u0644\u064A\u0628\u064A\u0627\",\n \"en\": \"Libya\"\n },\n \"langs\": [\n \"ar\"\n ],\n \"zones\": [\n \"Africa/Tripoli\"\n ],\n \"dayoff\": \"\",\n \"days\": {\n \"02-17\": {\n \"_name\": \"Revolution Day\"\n },\n \"05-01\": {\n \"_name\": \"05-01\"\n },\n \"09-16\": {\n \"name\": {\n \"ar\": \"\u064A\u0648\u0645 \u0627\u0644\u0634\u0647\u062F\u0627\u0621\",\n \"en\": \"Martyrs' Day\"\n }\n },\n \"10-23\": {\n \"_name\": \"Liberation Day\"\n },\n \"12-24\": {\n \"_name\": \"Independence Day\"\n },\n \"1 Muharram\": {\n \"_name\": \"1 Muharram\"\n },\n \"12 Rabi al-awwal\": {\n \"_name\": \"12 Rabi al-awwal\"\n },\n \"1 Shawwal P3D\": {\n \"_name\": \"1 Shawwal\"\n },\n \"9 Dhu al-Hijjah\": {\n \"_name\": \"9 Dhu al-Hijjah\"\n },\n \"10 Dhu al-Hijjah P3D\": {\n \"_name\": \"10 Dhu al-Hijjah\"\n }\n }\n },\n \"MA\": {\n \"names\": {\n \"ar\": \"\u0627\u0644\u0645\u0645\u0644\u0643\u0629 \u0627\u0644\u0645\u063A\u0631\u0628\u064A\u0629\",\n \"fr\": \"Royaume du Maroc\",\n \"en\": \"Kingdom of Morocco\"\n },\n \"langs\": [\n \"ar\",\n \"ber\",\n \"fr\"\n ],\n \"zones\": [\n \"Africa/Casablanca\"\n ],\n \"dayoff\": \"sunday\",\n \"days\": {\n \"01-01\": {\n \"_name\": \"01-01\"\n },\n \"01-11\": {\n \"name\": {\n \"fr\": \"Manifeste de l'ind\u00E9pendance\",\n \"ar\": \"\u0630\u0643\u0631\u0649 \u062A\u0642\u062F\u064A\u0645 \u0648\u062B\u064A\u0642\u0629 \u0627\u0644\u0627\u0633\u062A\u0642\u0644\u0627\u0644\",\n \"en\": \"Anniversary of the Independence Manifesto\"\n }\n },\n \"05-01\": {\n \"_name\": \"05-01\"\n },\n \"07-30\": {\n \"name\": {\n \"fr\": \"F\u00EAte du tr\u00F4ne\",\n \"ar\": \"\u0639\u064A\u062F \u0627\u0644\u0639\u0631\u0634\",\n \"en\": \"Feast of the Throne\"\n }\n },\n \"08-14\": {\n \"name\": {\n \"fr\": \"Journ\u00E9e de Oued Ed-Dahab\",\n \"ar\": \"\u064A\u0648\u0645 \u0648\u0627\u062F\u064A \u0627\u0644\u0630\u0647\u0628\",\n \"en\": \"Anniversary of the Recovery Oued Ed-Dahab\"\n }\n },\n \"08-20\": {\n \"name\": {\n \"fr\": \"F\u00EAte de la r\u00E9volution du roi et du peuple\",\n \"ar\": \"\u062B\u0648\u0631\u0629 \u0627\u0644\u0645\u0644\u0643 \u0648\u0627\u0644\u0634\u0639\u0628\",\n \"en\": \"Anniversary of the Revolution of the King and the People\"\n }\n },\n \"08-21\": {\n \"name\": {\n \"fr\": \"Journ\u00E9e de la jeunesse\",\n \"ar\": \"\u0639\u064A\u062F \u0627\u0644\u0634\u0628\u0627\u0628\",\n \"en\": \"Youth Day\"\n }\n },\n \"11-06\": {\n \"name\": {\n \"fr\": \"La Marche verte\",\n \"ar\": \"\u0627\u0644\u0645\u0633\u064A\u0631\u0629 \u0627\u0644\u062E\u0636\u0631\u0627\u0621\",\n \"en\": \"Anniversary of the Green March\"\n }\n },\n \"11-18\": {\n \"_name\": \"Independence Day\",\n \"name\": {\n \"fr\": \"F\u00EAte de l'ind\u00E9pendance\"\n }\n },\n \"1 Muharram\": {\n \"_name\": \"1 Muharram\"\n },\n \"12 Rabi al-awwal\": {\n \"_name\": \"12 Rabi al-awwal\"\n },\n \"1 Shawwal\": {\n \"_name\": \"1 Shawwal\"\n },\n \"10 Dhu al-Hijjah\": {\n \"_name\": \"10 Dhu al-Hijjah\"\n }\n }\n },\n \"MC\": {\n \"names\": {\n \"fr\": \"Monaco\",\n \"en\": \"Monaco\"\n },\n \"dayoff\": \"sunday\",\n \"langs\": [\n \"fr\"\n ],\n \"zones\": [\n \"Europe/Monaco\"\n ],\n \"days\": {\n \"01-01\": {\n \"_name\": \"01-01\"\n },\n \"01-27 and if sunday then next monday\": {\n \"substitute\": true,\n \"name\": {\n \"en\": \"Saint Devota's Day\",\n \"fr\": \"Sainte D\u00E9vote\"\n }\n },\n \"easter -2\": {\n \"_name\": \"easter -2\",\n \"type\": \"observance\"\n },\n \"easter\": {\n \"_name\": \"easter\",\n \"type\": \"observance\"\n },\n \"easter 1\": {\n \"_name\": \"easter 1\"\n },\n \"05-01 and if sunday then next monday\": {\n \"substitute\": true,\n \"_name\": \"05-01\",\n \"name\": {\n \"fr\": \"1er mai\"\n }\n },\n \"easter 39\": {\n \"_name\": \"easter 39\"\n },\n \"easter 50\": {\n \"_name\": \"easter 50\"\n },\n \"easter 60\": {\n \"_name\": \"easter 60\"\n },\n \"08-15\": {\n \"_name\": \"08-15\"\n },\n \"11-01\": {\n \"_name\": \"11-01\"\n },\n \"11-19 and if sunday then next monday\": {\n \"substitute\": true,\n \"name\": {\n \"en\": \"H.S.H. the Sovereign Prince's Day\",\n \"fr\": \"La F\u00EAte du Prince\"\n }\n },\n \"12-08\": {\n \"_name\": \"12-08\"\n },\n \"12-25 and if sunday then next monday\": {\n \"substitute\": true,\n \"_name\": \"12-25\"\n }\n }\n },\n \"MD\": {\n \"names\": {\n \"ro\": \"Republica Moldova\",\n \"en\": \"Moldova\"\n },\n \"langs\": [\n \"ro\"\n ],\n \"zones\": [\n \"Europe/Chisinau\"\n ],\n \"dayoff\": \"sunday\",\n \"days\": {\n \"01-01\": {\n \"_name\": \"01-01\"\n },\n \"julian 12-25 P2D\": {\n \"_name\": \"julian 12-25\",\n \"name\": {\n \"ro\": \"Craciun pe Rit Vechi\"\n }\n },\n \"03-08\": {\n \"_name\": \"03-08\"\n },\n \"orthodox\": {\n \"_name\": \"easter\"\n },\n \"orthodox 1\": {\n \"_name\": \"easter 1\"\n },\n \"orthodox 8\": {\n \"name\": {\n \"ro\": \"Pa\u015Ftele Bl\u0103jinilor\",\n \"en\": \"Memorial Day\"\n }\n },\n \"05-01\": {\n \"_name\": \"05-01\"\n },\n \"05-09\": {\n \"name\": {\n \"ro\": \"Ziua Victoriei\",\n \"en\": \"Victory Day\"\n }\n },\n \"08-27\": {\n \"_name\": \"Independence Day\"\n },\n \"08-31\": {\n \"name\": {\n \"ro\": \"Limba noastr\u0103\",\n \"en\": \"National Language Day\"\n }\n },\n \"1st saturday in October P2D\": {\n \"name\": {\n \"ro\": \"Ziua vinului\",\n \"en\": \"Wine Day\"\n },\n \"type\": \"observance\",\n \"active\": [\n {\n \"from\": 2013\n }\n ]\n },\n \"12-25\": {\n \"_name\": \"12-25\",\n \"name\": {\n \"ro\": \"Craciun pe stil Nou\"\n }\n }\n },\n \"states\": {\n \"CA\": {\n \"name\": \"Cahul\",\n \"days\": {\n \"11-21\": {\n \"name\": {\n \"ro\": \"Ziua Cahul\",\n \"en\": \"Cahul Day\"\n }\n }\n }\n },\n \"CU\": {\n \"name\": \"Chi\u0219in\u0103u\",\n \"days\": {\n \"10-14\": {\n \"name\": {\n \"ro\": \"Ziua capitalului\",\n \"en\": \"Capital's Day\"\n }\n }\n }\n }\n }\n },\n \"ME\": {\n \"names\": {\n \"hr\": \"Crna Gora\",\n \"sr\": \"\u0426\u0440\u043D\u0430 \u0413\u043E\u0440\u0430\",\n \"bs\": \"Crna Gora\",\n \"sq\": \"Mali i Zi\",\n \"en\": \"Montenegro\"\n },\n \"dayoff\": \"sunday\",\n \"langs\": [\n \"hr\",\n \"sr\",\n \"bs\",\n \"sq\"\n ],\n \"zones\": [\n \"Europe/Belgrade\"\n ],\n \"days\": {\n \"05-21 and if sunday then next tuesday\": {\n \"substitute\": true,\n \"_name\": \"Independence Day\"\n },\n \"05-22 and if sunday then next monday\": {\n \"substitute\": true,\n \"_name\": \"Independence Day\"\n },\n \"07-13 and if sunday then next tuesday\": {\n \"substitute\": true,\n \"name\": {\n \"hr\": \"Dan dr\u017Eavnosti\",\n \"sr\": \"\u0414\u0430\u043D \u0434\u0440\u0436\u0430\u0432\u043D\u043E\u0441\u0442\u0438\",\n \"en\": \"Statehood Day\"\n }\n },\n \"07-14 and if sunday then next monday\": {\n \"substitute\": true,\n \"name\": {\n \"hr\": \"Dan dr\u017Eavnosti\",\n \"sr\": \"\u0414\u0430\u043D \u0434\u0440\u0436\u0430\u0432\u043D\u043E\u0441\u0442\u0438\",\n \"en\": \"Statehood Day\"\n }\n },\n \"01-01 and if sunday then next tuesday\": {\n \"substitute\": true,\n \"_name\": \"01-01\"\n },\n \"01-02 and if sunday then next monday\": {\n \"substitute\": true,\n \"_name\": \"01-01\"\n },\n \"05-01 and if sunday then next tuesday\": {\n \"substitute\": true,\n \"_name\": \"05-01\"\n },\n \"05-02 and if sunday then next monday\": {\n \"substitute\": true,\n \"_name\": \"05-01\"\n },\n \"julian 12-24\": {\n \"_name\": \"12-24\"\n },\n \"julian 12-25\": {\n \"_name\": \"12-25\"\n },\n \"julian 12-26\": {\n \"_name\": \"12-26\"\n },\n \"julian 01-01\": {\n \"_name\": \"julian 01-01\",\n \"type\": \"observance\"\n },\n \"orthodox -2\": {\n \"_name\": \"easter -2\"\n },\n \"orthodox\": {\n \"_name\": \"easter\"\n },\n \"12-24\": {\n \"_name\": \"12-24\"\n },\n \"12-25\": {\n \"_name\": \"12-25\"\n },\n \"12-26\": {\n \"_name\": \"12-25\"\n },\n \"easter -2\": {\n \"_name\": \"easter -2\"\n },\n \"easter\": {\n \"_name\": \"easter\"\n },\n \"easter 1\": {\n \"_name\": \"easter\"\n },\n \"08-15\": {\n \"_name\": \"08-15\",\n \"type\": \"observance\"\n },\n \"11-01\": {\n \"_name\": \"11-01\"\n },\n \"1 Shawwal P3D\": {\n \"_name\": \"1 Shawwal\"\n },\n \"10 Dhu al-Hijjah P3D\": {\n \"_name\": \"10 Dhu al-Hijjah\"\n },\n \"1 Muharram\": {\n \"_name\": \"1 Muharram\",\n \"type\": \"observance\"\n },\n \"12 Rabi al-awwal\": {\n \"_name\": \"12 Rabi al-awwal\",\n \"type\": \"observance\"\n },\n \"27 Rajab\": {\n \"_name\": \"27 Rajab\",\n \"type\": \"observance\"\n },\n \"15 Shaban\": {\n \"_name\": \"15 Shaban\",\n \"type\": \"observance\"\n },\n \"1 Ramadan\": {\n \"_name\": \"1 Ramadan\",\n \"type\": \"observance\"\n },\n \"27 Ramadan\": {\n \"_name\": \"27 Ramadan\",\n \"type\": \"observance\"\n },\n \"15 Nisan P2D\": {\n \"_name\": \"15 Nisan\"\n },\n \"1 Tishrei\": {\n \"_name\": \"1 Tishrei\",\n \"type\": \"observance\"\n },\n \"10 Tishrei P2D\": {\n \"_name\": \"10 Tishrei\"\n }\n }\n },\n \"MF\": {\n \"names\": {\n \"en\": \"St. Martin\",\n \"fr\": \"Saint Martin\"\n },\n \"langs\": [\n \"fr\"\n ],\n \"zones\": [\n \"America/Marigot\"\n ],\n \"dayoff\": \"sunday\",\n \"_days\": \"FR\",\n \"days\": {\n \"05-27\": {\n \"name\": {\n \"fr\": \"Abolition de l'esclavage\",\n \"en\": \"abolition of slavery\"\n }\n }\n }\n },\n \"MG\": {\n \"names\": {\n \"mg\": \"Repoblikan'i Madagasikara\",\n \"fr\": \"R\u00E9publique de Madagascar\",\n \"en\": \"Madagascar\"\n },\n \"dayoff\": \"sunday\",\n \"langs\": [\n \"mg\",\n \"fr\",\n \"en\"\n ],\n \"zones\": [\n \"Africa/Nairobi\"\n ],\n \"days\": {\n \"01-01\": {\n \"_name\": \"01-01\"\n },\n \"03-08\": {\n \"name\": {\n \"mg\": \"Andro iraisam-pirenena ho an'ny vehivavy\",\n \"fr\": \"Journ\u00E9e internationale de la femme\",\n \"en\": \"International Women's Day\"\n },\n \"note\": \"only for women\"\n },\n \"03-29\": {\n \"name\": {\n \"mg\": \"Martioran'ny tolona tamin'ny 1947\",\n \"fr\": \"Comm\u00E9moration des martyrs de l'insurrection de 1947.\",\n \"en\": \"Martyrs' Day\"\n }\n },\n \"easter\": {\n \"_name\": \"easter\"\n },\n \"easter 1\": {\n \"_name\": \"easter 1\"\n },\n \"05-01\": {\n \"_name\": \"05-01\"\n },\n \"05-25\": {\n \"name\": {\n \"mg\": \"Andron'i Afrika\",\n \"fr\": \"Jour de l'Afrique\",\n \"en\": \"Africa Day\"\n }\n },\n \"easter 39\": {\n \"_name\": \"easter 39\"\n },\n \"easter 50\": {\n \"_name\": \"easter 50\"\n },\n \"06-26\": {\n \"_name\": \"Independence Day\",\n \"name\": {\n \"mg\": \"Fetim-pirenena\",\n \"fr\": \"F\u00EAte Nationale\"\n }\n },\n \"08-15\": {\n \"_name\": \"08-15\"\n },\n \"11-01\": {\n \"_name\": \"11-01\"\n },\n \"12-25\": {\n \"_name\": \"12-25\"\n },\n \"1 Shawwal\": {\n \"_name\": \"1 Shawwal\",\n \"note\": \"For Muslim\"\n },\n \"10 Dhu al-Hijjah\": {\n \"_name\": \"10 Dhu al-Hijjah\",\n \"note\": \"For Muslim\"\n }\n }\n },\n \"MK\": {\n \"names\": {\n \"mk\": \"\u0420\u0435\u043F\u0443\u0431\u043B\u0438\u043A\u0430 \u041C\u0430\u043A\u0435\u0434\u043E\u043D\u0438\u0458\u0430\",\n \"en\": \"Macedonia\"\n },\n \"langs\": [\n \"mk\"\n ],\n \"zones\": [\n \"Europe/Belgrade\"\n ],\n \"dayoff\": \"sunday\",\n \"days\": {\n \"01-01 and if sunday then next monday\": {\n \"substitute\": true,\n \"_name\": \"01-01\"\n },\n \"julian 12-25 and if sunday then next monday\": {\n \"substitute\": true,\n \"_name\": \"julian 12-25\"\n },\n \"orthodox\": {\n \"_name\": \"orthodox\"\n },\n \"orthodox 1\": {\n \"_name\": \"orthodox 1\"\n },\n \"05-01 and if sunday then next monday\": {\n \"substitute\": true,\n \"_name\": \"05-01\"\n },\n \"05-24 and if sunday then next monday\": {\n \"substitute\": true,\n \"name\": {\n \"mk\": \"\u0421\u0432. \u041A\u0438\u0440\u0438\u043B \u0438 \u041C\u0435\u0442\u043E\u0434\u0438\u0458\",\n \"en\": \"Saints Cyril and Methodius Day\"\n }\n },\n \"08-02 and if sunday then next monday\": {\n \"substitute\": true,\n \"name\": {\n \"mk\": \"\u0414\u0435\u043D \u043D\u0430 \u0420\u0435\u043F\u0443\u0431\u043B\u0438\u043A\u0430\u0442\u0430\",\n \"en\": \"Day of the Republic\"\n }\n },\n \"09-08 and if sunday then next monday\": {\n \"substitute\": true,\n \"_name\": \"Independence Day\"\n },\n \"10-11 and if sunday then next monday\": {\n \"substitute\": true,\n \"name\": {\n \"mk\": \"\u0414\u0435\u043D \u043D\u0430 \u0432\u043E\u0441\u0442\u0430\u043D\u0438\u0435\u0442\u043E\",\n \"en\": \"Revolution Day\"\n }\n },\n \"10-23 and if sunday then next monday\": {\n \"substitute\": true,\n \"name\": {\n \"mk\": \"\u0414\u0435\u043D \u043D\u0430 \u043C\u0430\u043A\u0435\u0434\u043E\u043D\u0441\u043A\u0430\u0442\u0430 \u0440\u0435\u0432\u043E\u043B\u0443\u0446\u0438\u043E\u043D\u0435\u0440\u043D\u0430 \u0431\u043E\u0440\u0431\u0430\",\n \"en\": \"Day of the Macedonian Revolutionary Struggle\"\n }\n },\n \"12-08 and if sunday then next monday\": {\n \"substitute\": true,\n \"name\": {\n \"mk\": \"\u0421\u0432. \u041A\u043B\u0438\u043C\u0435\u043D\u0442 \u041E\u0445\u0440\u0438\u0434\u0441\u043A\u0438\",\n \"en\": \"Saint Clement of Ohrid Day\"\n }\n },\n \"1 Shawwal and if sunday then next monday\": {\n \"substitute\": true,\n \"_name\": \"1 Shawwal\"\n },\n \"julian 12-24\": {\n \"_name\": \"julian 12-24\",\n \"type\": \"optional\",\n \"note\": \"Orthodox believers\"\n },\n \"julian 01-06\": {\n \"_name\": \"01-06\",\n \"type\": \"optional\",\n \"note\": \"Orthodox believers\"\n },\n \"orthodox -2\": {\n \"_name\": \"orthodox -2\",\n \"type\": \"optional\",\n \"note\": \"Orthodox believers\"\n },\n \"orthodox 47\": {\n \"name\": {\n \"mk\": \"\u043F\u0435\u0442\u043E\u043A \u043F\u0440\u0435\u0434 \u0414\u0443\u0445\u043E\u0432\u0434\u0435\u043D\",\n \"en\": \"Friday before Pentecost\"\n },\n \"type\": \"optional\",\n \"note\": \"Orthodox believers\"\n },\n \"orthodox 49\": {\n \"_name\": \"easter 49\",\n \"type\": \"optional\",\n \"note\": \"Orthodox believers\"\n },\n \"julian 08-15\": {\n \"_name\": \"08-15\",\n \"type\": \"optional\",\n \"note\": \"Orthodox believers\"\n },\n \"10 Dhu al-Hijjah\": {\n \"_name\": \"10 Dhu al-Hijjah\",\n \"type\": \"optional\",\n \"note\": \"Muslim believers\"\n },\n \"10 Tishrei\": {\n \"_name\": \"10 Tishrei\",\n \"type\": \"optional\",\n \"note\": \"Jewish believers\"\n },\n \"easter 1\": {\n \"_name\": \"easter 1\",\n \"type\": \"optional\",\n \"note\": \"Catholic believers\"\n },\n \"11-01\": {\n \"_name\": \"11-01\",\n \"type\": \"optional\",\n \"note\": \"Catholic believers\"\n },\n \"12-25\": {\n \"_name\": \"12-25\",\n \"type\": \"optional\",\n \"note\": \"Catholic believers\"\n },\n \"11-22\": {\n \"name\": {\n \"mk\": \"\u0414\u0435\u043D \u043D\u0430 \u0410\u043B\u0431\u0430\u043D\u0441\u043A\u0430\u0442\u0430 \u0430\u0437\u0431\u0443\u043A\u0430\",\n \"en\": \"Day of the Albanian Alphabet\"\n },\n \"type\": \"optional\",\n \"note\": \"For members of the Albanian community\"\n },\n \"12-21\": {\n \"name\": {\n \"mk\": \"\u0414\u0435\u043D \u043D\u0430 \u043D\u0430\u0441\u0442\u0430\u0432\u0430 \u043D\u0430 \u0442\u0443\u0440\u0441\u043A\u0438 \u0458\u0430\u0437\u0438\u043A\",\n \"en\": \"Turkish Language Day\"\n },\n \"type\": \"optional\",\n \"note\": \"For members of the the Turkish community\"\n },\n \"01-27\": {\n \"name\": {\n \"mk\": \"\u0421\u0432\u0435\u0442\u0438 \u0421\u0430\u0432\u0430\",\n \"en\": \"St. Sava\"\n },\n \"type\": \"optional\",\n \"note\": \"For members of the Serbian community\"\n },\n \"04-08\": {\n \"name\": {\n \"mk\": \"\u041C\u0435\u0453\u0443\u043D\u0430\u0440\u043E\u0434\u0435\u043D \u0434\u0435\u043D \u043D\u0430 \u0420\u043E\u043C\u0438\u0442\u0435\",\n \"en\": \"International Roma Day\"\n },\n \"type\": \"optional\",\n \"note\": \"For members of the the Roma community\"\n },\n \"05-23\": {\n \"name\": {\n \"mk\": \"\u041D\u0430\u0446\u0438\u043E\u043D\u0430\u043B\u0435\u043D \u0434\u0435\u043D \u043D\u0430 \u0412\u043B\u0430\u0441\u0442\u0438\u0442\u0435\",\n \"en\": \"National Day of Authorities\"\n },\n \"type\": \"optional\",\n \"note\": \"For members of the Vlach community\"\n },\n \"09-28\": {\n \"name\": {\n \"mk\": \"\u041C\u0435\u0453\u0443\u043D\u0430\u0440\u043E\u0434\u0435\u043D \u0434\u0435\u043D \u043D\u0430 \u0411\u043E\u0448\u045A\u0430\u0446\u0438\u0442\u0435\",\n \"en\": \"International Day of Bosniaks\"\n },\n \"type\": \"optional\",\n \"note\": \"For Members of the Bosniak community.\"\n }\n }\n },\n \"ML\": {\n \"names\": {\n \"fr\": \"R\u00E9publique du Mali\",\n \"en\": \"Republic of Mali\"\n },\n \"langs\": [\n \"fr\",\n \"en\"\n ],\n \"zones\": [\n \"Africa/Abidjan\"\n ],\n \"dayoff\": \"sunday\",\n \"days\": {\n \"01-01\": {\n \"_name\": \"01-01\"\n },\n \"01-20\": {\n \"name\": {\n \"fr\": \"F\u00EAte de l'arm\u00E9e\",\n \"en\": \"Army Day\"\n }\n },\n \"03-26\": {\n \"name\": {\n \"fr\": \"Journ\u00E9e des Martyrs\",\n \"en\": \"Martyrs' Day\"\n }\n },\n \"easter 1\": {\n \"_name\": \"easter 1\"\n },\n \"05-01\": {\n \"_name\": \"05-01\"\n },\n \"12-25\": {\n \"_name\": \"12-25\"\n },\n \"1 Shawwal\": {\n \"_name\": \"1 Shawwal\"\n },\n \"05-25\": {\n \"name\": \"Jour de l'Afrique\"\n },\n \"10 Dhu al-Hijjah\": {\n \"_name\": \"10 Dhu al-Hijjah\"\n },\n \"09-22\": {\n \"_name\": \"Independence Day\",\n \"name\": {\n \"fr\": \"F\u00EAte nationale de l'ind\u00E9pendance\"\n }\n },\n \"12 Rabi al-awwal\": {\n \"_name\": \"12 Rabi al-awwal\"\n }\n }\n },\n \"MQ\": {\n \"names\": {\n \"fr\": \"Martinique\",\n \"en\": \"Martinique\"\n },\n \"langs\": [\n \"fr\"\n ],\n \"zones\": [\n \"America/Martinique\"\n ],\n \"dayoff\": \"sunday\",\n \"_days\": \"FR\",\n \"days\": {\n \"easter -2\": {\n \"_name\": \"easter -2\"\n },\n \"05-22\": {\n \"_name\": \"Abolition of Slavery\"\n },\n \"07-21\": {\n \"name\": {\n \"fr\": \"Jour de Victor Schoelcher\",\n \"en\": \"Victor Shoelcher Day\"\n }\n }\n }\n },\n \"MR\": {\n \"names\": {\n \"ar\": \"\u0627\u0644\u062C\u0645\u0647\u0648\u0631\u064A\u0629 \u0627\u0644\u0625\u0633\u0644\u0627\u0645\u064A\u0629 \u0627\u0644\u0645\u0648\u0631\u064A\u062A\u0627\u0646\u064A\u0629\",\n \"en\": \"Mauritania\"\n },\n \"langs\": [\n \"ar\",\n \"fr\"\n ],\n \"zones\": [\n \"Africa/Abidjan\"\n ],\n \"dayoff\": \"\",\n \"days\": {\n \"01-01\": {\n \"_name\": \"01-01\"\n },\n \"05-01\": {\n \"_name\": \"05-01\"\n },\n \"05-25\": {\n \"name\": {\n \"ar\": \"\u064A\u0648\u0645 \u0627\u0641\u0631\u064A\u0642\u064A\u0627\",\n \"en\": \"Africa Day\"\n }\n },\n \"11-28\": {\n \"_name\": \"Independence Day\"\n },\n \"1 Muharram\": {\n \"_name\": \"1 Muharram\"\n },\n \"12 Rabi al-awwal\": {\n \"_name\": \"12 Rabi al-awwal\"\n },\n \"1 Shawwal\": {\n \"_name\": \"1 Shawwal\"\n },\n \"10 Dhu al-Hijjah P3D\": {\n \"_name\": \"10 Dhu al-Hijjah\"\n }\n }\n },\n \"MS\": {\n \"names\": {\n \"en\": \"Montserrat\"\n },\n \"langs\": [\n \"en\"\n ],\n \"zones\": [\n \"America/Port_of_Spain\"\n ],\n \"dayoff\": \"sunday\",\n \"days\": {\n \"01-01 and if Saturday then next Monday if Sunday then next Tuesday\": {\n \"substitute\": true,\n \"_name\": \"01-01\"\n },\n \"03-17 and if Saturday, Sunday then next Monday\": {\n \"substitute\": true,\n \"name\": {\n \"en\": \"Saint Patrick's Day\"\n }\n },\n \"easter -2\": {\n \"_name\": \"easter -2\"\n },\n \"easter 1\": {\n \"_name\": \"easter 1\"\n },\n \"1st Monday in May\": {\n \"_name\": \"05-01\"\n },\n \"easter 50\": {\n \"_name\": \"easter 50\"\n },\n \"2nd Monday after 06-02\": {\n \"name\": {\n \"en\": \"Queen's Birthday Celebration\"\n }\n },\n \"08-01 if Saturday, Sunday then next Monday\": {\n \"name\": {\n \"en\": \"Emancipation Day\"\n }\n },\n \"12-25 and if Saturday then next Monday if Sunday then next Tuesday\": {\n \"substitute\": true,\n \"_name\": \"12-25\"\n },\n \"12-26 and if Saturday then next Monday if Sunday then next Tuesday\": {\n \"substitute\": true,\n \"_name\": \"12-26\"\n },\n \"12-31 and if Saturday then next Monday if Sunday then next Tuesday\": {\n \"substitute\": true,\n \"_name\": \"12-31\",\n \"name\": {\n \"en\": \"Festival Day\"\n }\n }\n }\n },\n \"MT\": {\n \"names\": {\n \"mt\": \"Malta\",\n \"en\": \"Malta\"\n },\n \"dayoff\": \"sunday\",\n \"langs\": [\n \"mt\"\n ],\n \"zones\": [\n \"Europe/Malta\"\n ],\n \"days\": {\n \"01-01\": {\n \"_name\": \"01-01\"\n },\n \"02-10\": {\n \"name\": {\n \"en\": \"Feast of Saint Paul's Shipwreck in Malta\",\n \"mt\": \"Nawfra\u0121ju ta' San Pawl\"\n }\n },\n \"03-19\": {\n \"_name\": \"03-19\"\n },\n \"03-31\": {\n \"name\": {\n \"en\": \"Freedom Day\",\n \"mt\": \"Jum il-\u0126elsien\"\n }\n },\n \"easter -2\": {\n \"_name\": \"easter -2\"\n },\n \"05-01\": {\n \"_name\": \"05-01\"\n },\n \"06-07\": {\n \"name\": {\n \"mt\": \"Sette Giugno\",\n \"en\": \"June 7th\"\n }\n },\n \"06-29\": {\n \"_name\": \"06-29\"\n },\n \"08-15\": {\n \"_name\": \"08-15\"\n },\n \"09-08\": {\n \"name\": {\n \"en\": \"Victory Day\",\n \"mt\": \"Jum il-Vitorja\"\n }\n },\n \"09-21\": {\n \"_name\": \"Independence Day\"\n },\n \"12-08\": {\n \"_name\": \"12-08\"\n },\n \"12-13\": {\n \"name\": {\n \"en\": \"Republic Day\",\n \"mt\": \"Jum ir-Repubblika\"\n }\n },\n \"12-25\": {\n \"_name\": \"12-25\"\n }\n }\n },\n \"MW\": {\n \"names\": {\n \"en\": \"Malawi\"\n },\n \"dayoff\": \"sunday\",\n \"langs\": [\n \"en\"\n ],\n \"zones\": [\n \"Africa/Maputo\"\n ],\n \"days\": {\n \"01-01 and if saturday,sunday then next monday\": {\n \"substitute\": true,\n \"_name\": \"01-01\"\n },\n \"01-15 and if saturday,sunday then next monday\": {\n \"substitute\": true,\n \"name\": {\n \"en\": \"John Chilembwe Day\"\n }\n },\n \"03-03 and if saturday,sunday then next monday\": {\n \"name\": {\n \"en\": \"Martyrs' Day\"\n }\n },\n \"easter -2\": {\n \"_name\": \"easter -2\"\n },\n \"easter\": {\n \"_name\": \"easter\",\n \"type\": \"observance\"\n },\n \"easter 1\": {\n \"_name\": \"easter 1\"\n },\n \"05-01 and if saturday,sunday then next monday\": {\n \"_name\": \"05-01\"\n },\n \"05-14 and if saturday,sunday then next monday\": {\n \"substitute\": true,\n \"name\": {\n \"en\": \"Kamuzu Day\"\n }\n },\n \"07-06 and if saturday,sunday then next monday\": {\n \"substitute\": true,\n \"_name\": \"Independence Day\"\n },\n \"10-15 and if saturday,sunday then next monday\": {\n \"substitute\": true,\n \"_name\": \"Mothers Day\"\n },\n \"12-25 and if saturday,sunday then next monday\": {\n \"substitute\": true,\n \"_name\": \"12-25\"\n },\n \"1 Shawwal and if saturday,sunday then next monday\": {\n \"substitute\": true,\n \"_name\": \"1 Shawwal\",\n \"name\": {\n \"en\": \"Eid al Fitri\"\n }\n }\n }\n },\n \"MX\": {\n \"names\": {\n \"es\": \"M\u00E9xico\",\n \"en\": \"Mexico\"\n },\n \"dayoff\": \"sunday\",\n \"langs\": [\n \"es\"\n ],\n \"zones\": [\n \"America/Mexico_City\",\n \"America/Cancun\",\n \"America/Merida\",\n \"America/Monterrey\",\n \"America/Matamoros\",\n \"America/Mazatlan\",\n \"America/Chihuahua\",\n \"America/Ojinaga\",\n \"America/Hermosillo\",\n \"America/Tijuana\",\n \"America/Santa_Isabel\",\n \"America/Bahia_Banderas\"\n ],\n \"days\": {\n \"01-01\": {\n \"_name\": \"01-01\"\n },\n \"02-05\": {\n \"_name\": \"Constitution Day\"\n },\n \"1st monday in February\": {\n \"name\": {\n \"en\": \"Constitution Day (day off)\",\n \"es\": \"D\u00EDa de la Constituci\u00F3n (d\u00EDa libre)\"\n }\n },\n \"03-21\": {\n \"name\": {\n \"en\": \"Benito Ju\u00E1rez's birthday\",\n \"es\": \"Natalicio de Benito Ju\u00E1rez\"\n }\n },\n \"3rd monday in March\": {\n \"name\": {\n \"en\": \"Benito Ju\u00E1rez's birthday (day off)\",\n \"es\": \"Natalicio de Benito Ju\u00E1rez (d\u00EDa libre)\"\n }\n },\n \"easter -3\": {\n \"_name\": \"easter -3\",\n \"type\": \"bank\"\n },\n \"easter -2\": {\n \"_name\": \"easter -2\",\n \"type\": \"bank\"\n },\n \"05-01\": {\n \"_name\": \"05-01\"\n },\n \"05-10\": {\n \"_name\": \"Mothers Day\",\n \"type\": \"observance\"\n },\n \"09-16\": {\n \"_name\": \"Independence Day\"\n },\n \"11-02\": {\n \"_name\": \"11-02\",\n \"type\": \"bank\"\n },\n \"11-20\": {\n \"_name\": \"Revolution Day\"\n },\n \"3rd monday in November\": {\n \"name\": {\n \"en\": \"Revolution Day (day off)\",\n \"es\": \"D\u00EDa de la Revoluci\u00F3n (d\u00EDa libre)\"\n }\n },\n \"12-01 every 6 years since 1934\": {\n \"name\": {\n \"en\": \"Change of Federal Government\",\n \"es\": \"Transmisi\u00F3n del Poder Ejecutivo Federal\"\n }\n },\n \"12-12\": {\n \"name\": {\n \"en\": \"Day of the Virgin of Guadalupe\",\n \"es\": \"D\u00EDa de la Virgen de Guadalupe\"\n },\n \"type\": \"bank\"\n },\n \"12-25\": {\n \"_name\": \"12-25\"\n }\n }\n },\n \"MY\": {\n \"names\": {\n \"en\": \"Malaysia\"\n },\n \"langs\": [\n \"ms\"\n ],\n \"zones\": [\n \"Asia/Kuala_Lumpur\",\n \"Asia/Kuching\"\n ],\n \"dayoff\": \"Saturday\",\n \"days\": {\n \"01-01\": {\n \"_name\": \"01-01\"\n },\n \"substitutes 01-01 if Sunday then next Monday\": {\n \"substitute\": true,\n \"_name\": \"01-01\"\n },\n \"chinese 01-0-01\": {\n \"name\": {\n \"en\": \"Chinese New Year\",\n \"ms\": \"Tahun Baru Cina\"\n }\n },\n \"chinese 01-0-02\": {\n \"name\": {\n \"en\": \"Chinese New Year\",\n \"ms\": \"Tahun Baru Cina\"\n }\n },\n \"substitutes chinese 01-0-01 if Sunday then next Monday\": {\n \"substitute\": true,\n \"name\": {\n \"en\": \"Chinese New Year\",\n \"ms\": \"Tahun Baru Cina\"\n }\n },\n \"substitutes chinese 01-0-02 if Sunday then next Monday\": {\n \"substitute\": true,\n \"name\": {\n \"en\": \"Chinese New Year\",\n \"ms\": \"Tahun Baru Cina\"\n }\n },\n \"05-01\": {\n \"_name\": \"05-01\"\n },\n \"substitutes 05-01 if Sunday then next Monday\": {\n \"substitute\": true,\n \"_name\": \"05-01\"\n },\n \"1st Monday in June\": {\n \"name\": {\n \"en\": \"Yang di-Pertuan Agong's Birthday\",\n \"ms\": \"Hari Keputeraan Yang di-Pertuan Agong\"\n }\n },\n \"08-31\": {\n \"_name\": \"Independence Day\"\n },\n \"substitutes 08-31 if Sunday then next Monday\": {\n \"substitute\": true,\n \"_name\": \"Independence Day\"\n },\n \"09-16\": {\n \"name\": {\n \"en\": \"Malaysia Day\",\n \"ms\": \"Hari Malaysia\"\n }\n },\n \"substitutes 09-16 if Sunday then next Monday\": {\n \"substitute\": true,\n \"name\": {\n \"en\": \"Malaysia Day\",\n \"ms\": \"Hari Malaysia\"\n }\n },\n \"12-25\": {\n \"_name\": \"12-25\"\n },\n \"substitutes 12-25 if Sunday then next Monday\": {\n \"substitute\": true,\n \"_name\": \"12-25\"\n },\n \"17 Ramadan\": {\n \"_name\": \"17 Ramadan\",\n \"disable\": [\n \"2022-04-18\"\n ],\n \"enable\": [\n \"2022-04-19\"\n ]\n },\n \"1 Shawwal\": {\n \"_name\": \"1 Shawwal\",\n \"disable\": [\n \"2022-05-02\"\n ],\n \"enable\": [\n \"2022-05-03\"\n ]\n },\n \"2 Shawwal\": {\n \"_name\": \"1 Shawwal\",\n \"disable\": [\n \"2022-05-03\"\n ],\n \"enable\": [\n \"2022-05-04\"\n ]\n },\n \"10 Dhu al-Hijjah\": {\n \"_name\": \"10 Dhu al-Hijjah\",\n \"disable\": [\n \"2022-07-09\"\n ],\n \"enable\": [\n \"2022-07-10\"\n ]\n },\n \"1 Muharram\": {\n \"_name\": \"1 Muharram\"\n },\n \"12 Rabi al-awwal\": {\n \"_name\": \"12 Rabi al-awwal\",\n \"disable\": [\n \"2022-10-08\"\n ],\n \"enable\": [\n \"2022-10-09\"\n ]\n },\n \"2010-05-28\": {\n \"_name\": \"Vesak\"\n },\n \"2011-05-17\": {\n \"_name\": \"Vesak\"\n },\n \"2012-05-06\": {\n \"_name\": \"Vesak\"\n },\n \"2013-05-25\": {\n \"_name\": \"Vesak\"\n },\n \"2014-05-15\": {\n \"_name\": \"Vesak\"\n },\n \"2015-06-02\": {\n \"_name\": \"Vesak\"\n },\n \"2016-05-22\": {\n \"_name\": \"Vesak\"\n },\n \"2017-05-10\": {\n \"_name\": \"Vesak\"\n },\n \"2018-05-29\": {\n \"_name\": \"Vesak\"\n },\n \"2019-05-19\": {\n \"_name\": \"Vesak\"\n },\n \"2020-05-07\": {\n \"_name\": \"Vesak\"\n },\n \"2021-05-26\": {\n \"_name\": \"Vesak\"\n },\n \"2022-05-15\": {\n \"_name\": \"Vesak\"\n },\n \"2022-05-16\": {\n \"substitute\": true,\n \"_name\": \"Vesak\"\n },\n \"2023-05-04\": {\n \"_name\": \"Vesak\"\n },\n \"2024-05-22\": {\n \"_name\": \"Vesak\"\n },\n \"2025-05-12\": {\n \"_name\": \"Vesak\"\n },\n \"2026-05-31\": {\n \"_name\": \"Vesak\"\n },\n \"2016-10-29\": {\n \"_name\": \"Deepavali\"\n },\n \"2017-10-18\": {\n \"_name\": \"Deepavali\"\n },\n \"2018-11-06\": {\n \"_name\": \"Deepavali\"\n },\n \"2019-10-27\": {\n \"_name\": \"Deepavali\"\n },\n \"2019-10-28\": {\n \"substitute\": true,\n \"_name\": \"Deepavali\"\n },\n \"2020-11-14\": {\n \"_name\": \"Deepavali\"\n },\n \"2021-11-04\": {\n \"_name\": \"Deepavali\"\n },\n \"2022-10-24\": {\n \"_name\": \"Deepavali\"\n },\n \"2023-11-12\": {\n \"_name\": \"Deepavali\"\n },\n \"2023-11-13\": {\n \"substitute\": true,\n \"_name\": \"Deepavali\"\n },\n \"2024-10-31\": {\n \"_name\": \"Deepavali\"\n },\n \"2025-10-20\": {\n \"_name\": \"Deepavali\"\n },\n \"2026-11-09\": {\n \"_name\": \"Deepavali\"\n },\n \"2027-10-28\": {\n \"_name\": \"Deepavali\"\n },\n \"2028-11-15\": {\n \"_name\": \"Deepavali\"\n },\n \"2029-11-05\": {\n \"_name\": \"Deepavali\"\n },\n \"2030-10-25\": {\n \"_name\": \"Deepavali\"\n }\n },\n \"states\": {\n \"10\": {\n \"name\": \"Selangor\",\n \"days\": {\n \"12-11\": {\n \"name\": {\n \"en\": \"Sultan of Selangor's Birthday\",\n \"id\": \"Hari Keputeraan Sultan Selangor\"\n }\n },\n \"2016-01-24\": {\n \"_name\": \"Thaipusam\"\n },\n \"2017-02-10\": {\n \"_name\": \"Thaipusam\"\n },\n \"2018-01-31\": {\n \"_name\": \"Thaipusam\"\n },\n \"2019-01-21\": {\n \"_name\": \"Thaipusam\"\n },\n \"2020-02-08\": {\n \"_name\": \"Thaipusam\"\n },\n \"2021-01-28\": {\n \"_name\": \"Thaipusam\"\n },\n \"2022-01-18\": {\n \"_name\": \"Thaipusam\"\n },\n \"2023-02-05\": {\n \"_name\": \"Thaipusam\"\n },\n \"2024-01-25\": {\n \"_name\": \"Thaipusam\"\n },\n \"2025-02-11\": {\n \"_name\": \"Thaipusam\"\n },\n \"2026-02-01\": {\n \"_name\": \"Thaipusam\"\n }\n }\n },\n \"11\": {\n \"name\": \"Terengganu\",\n \"days\": {\n \"01-01\": false,\n \"03-04\": {\n \"name\": {\n \"en\": \"Anniversary of Installation of the Sultan of Terengganu\",\n \"ms\": \"Hari Ulang Tahun Pertabalan Sultan Terengganu\"\n }\n },\n \"04-26\": {\n \"name\": {\n \"en\": \"Sultan of Terengganu's Birthday\",\n \"ms\": \"Hari Keputeraan Sultan Terengganu\"\n }\n },\n \"27 Rajab\": {\n \"_name\": \"27 Rajab\"\n },\n \"9 Dhu al-Hijjah\": {\n \"_name\": \"9 Dhu al-Hijjah\"\n },\n \"11 Dhu al-Hijjah\": {\n \"_name\": \"10 Dhu al-Hijjah\"\n }\n }\n },\n \"12\": {\n \"name\": \"Sabah\",\n \"days\": {\n \"easter -2\": {\n \"_name\": \"easter -2\"\n },\n \"05-30\": {\n \"name\": {\n \"en\": \"Tadau Kaamatan\",\n \"ms\": \"Pesta Kaamatan\"\n }\n },\n \"05-31\": {\n \"name\": {\n \"en\": \"Tadau Kaamatan\",\n \"ms\": \"Pesta Kaamatan\"\n }\n },\n \"1st Saturday in October\": {\n \"name\": {\n \"en\": \"Sabah State Governor's Birthday\",\n \"ms\": \"Hari Jadi Yang di-Pertua Negeri Sabah\"\n }\n },\n \"12-24\": {\n \"_name\": \"12-24\"\n },\n \"17 Ramadan\": false\n }\n },\n \"13\": {\n \"name\": \"Sarawak\",\n \"days\": {\n \"2016-10-29\": false,\n \"2017-10-18\": false,\n \"2018-11-06\": false,\n \"2019-10-27\": false,\n \"2020-11-14\": false,\n \"2021-11-04\": false,\n \"2022-10-24\": false,\n \"2023-11-13\": false,\n \"2024-10-31\": false,\n \"2025-10-20\": false,\n \"2026-11-09\": false,\n \"2027-10-28\": false,\n \"2028-11-15\": false,\n \"2029-11-05\": false,\n \"2030-10-25\": false,\n \"easter -2\": {\n \"_name\": \"easter -2\"\n },\n \"06-01\": {\n \"name\": {\n \"en\": \"Gawai Dayak\",\n \"ms\": \"Perayaan Hari Gawai Dayak\"\n }\n },\n \"06-02\": {\n \"name\": {\n \"en\": \"Gawai Dayak\",\n \"ms\": \"Perayaan Hari Gawai Dayak\"\n }\n },\n \"07-22\": {\n \"name\": {\n \"en\": \"Sarawak Independence Day\",\n \"ms\": \"Hari Kemerdekaan Sarawak\"\n }\n },\n \"2nd Saturday in October\": {\n \"name\": {\n \"en\": \"Sarawak State Governor's Birthday\",\n \"ms\": \"Hari Jadi Yang di-Pertua Negeri Sarawak\"\n }\n },\n \"17 Ramadan\": false\n }\n },\n \"14\": {\n \"name\": \"Kuala Lumpur\",\n \"days\": {\n \"02-01\": {\n \"name\": {\n \"en\": \"Federal Territory Day\",\n \"ms\": \"Hari Wilayah Persekutuan\"\n }\n },\n \"2016-01-24\": {\n \"_name\": \"Thaipusam\"\n },\n \"2017-02-10\": {\n \"_name\": \"Thaipusam\"\n },\n \"2018-01-31\": {\n \"_name\": \"Thaipusam\"\n },\n \"2019-01-21\": {\n \"_name\": \"Thaipusam\"\n },\n \"2020-02-08\": {\n \"_name\": \"Thaipusam\"\n },\n \"2021-01-28\": {\n \"_name\": \"Thaipusam\"\n },\n \"2022-01-18\": {\n \"_name\": \"Thaipusam\"\n },\n \"2023-02-05\": {\n \"_name\": \"Thaipusam\"\n },\n \"2024-01-25\": {\n \"_name\": \"Thaipusam\"\n },\n \"2025-02-11\": {\n \"_name\": \"Thaipusam\"\n },\n \"2026-02-01\": {\n \"_name\": \"Thaipusam\"\n }\n }\n },\n \"15\": {\n \"name\": \"Labuan\",\n \"days\": {\n \"02-01\": {\n \"name\": {\n \"en\": \"Federal Territory Day\",\n \"ms\": \"Hari Wilayah Persekutuan\"\n }\n },\n \"05-30\": {\n \"name\": {\n \"en\": \"Tadau Kaamatan\",\n \"ms\": \"Pesta Kaamatan\"\n }\n },\n \"05-31\": {\n \"name\": {\n \"en\": \"Tadau Kaamatan\",\n \"ms\": \"Pesta Kaamatan\"\n }\n }\n }\n },\n \"16\": {\n \"name\": \"Putrajaya\",\n \"days\": {\n \"02-01\": {\n \"name\": {\n \"en\": \"Federal Territory Day\",\n \"ms\": \"Hari Wilayah Persekutuan\"\n }\n },\n \"2016-01-24\": {\n \"_name\": \"Thaipusam\"\n },\n \"2017-02-10\": {\n \"_name\": \"Thaipusam\"\n },\n \"2018-01-31\": {\n \"_name\": \"Thaipusam\"\n },\n \"2019-01-21\": {\n \"_name\": \"Thaipusam\"\n },\n \"2020-02-08\": {\n \"_name\": \"Thaipusam\"\n },\n \"2021-01-28\": {\n \"_name\": \"Thaipusam\"\n },\n \"2022-01-18\": {\n \"_name\": \"Thaipusam\"\n },\n \"2023-02-05\": {\n \"_name\": \"Thaipusam\"\n },\n \"2024-01-25\": {\n \"_name\": \"Thaipusam\"\n },\n \"2025-02-11\": {\n \"_name\": \"Thaipusam\"\n },\n \"2026-02-01\": {\n \"_name\": \"Thaipusam\"\n }\n }\n },\n \"01\": {\n \"name\": \"Johor\",\n \"days\": {\n \"01-01\": false,\n \"03-23\": {\n \"name\": {\n \"en\": \"Sultan of Johor's Birthday\",\n \"ms\": \"Hari Keputeraan Sultan Johor\"\n }\n },\n \"1 Ramadan\": {\n \"_name\": \"1 Ramadan\"\n },\n \"17 Ramadan\": false,\n \"6 Safar\": {\n \"name\": {\n \"en\": \"Hari Hol of Sultan Iskandar of Johor\",\n \"ms\": \"Hari Hol Almarhum Sultan Iskandar\"\n }\n },\n \"2016-01-24\": {\n \"_name\": \"Thaipusam\"\n },\n \"2017-02-10\": {\n \"_name\": \"Thaipusam\"\n },\n \"2018-01-31\": {\n \"_name\": \"Thaipusam\"\n },\n \"2019-01-21\": {\n \"_name\": \"Thaipusam\"\n },\n \"2020-02-08\": {\n \"_name\": \"Thaipusam\"\n },\n \"2021-01-28\": {\n \"_name\": \"Thaipusam\"\n },\n \"2022-01-18\": {\n \"_name\": \"Thaipusam\"\n },\n \"2023-02-05\": {\n \"_name\": \"Thaipusam\"\n },\n \"2024-01-25\": {\n \"_name\": \"Thaipusam\"\n },\n \"2025-02-11\": {\n \"_name\": \"Thaipusam\"\n },\n \"2026-02-01\": {\n \"_name\": \"Thaipusam\"\n }\n }\n },\n \"02\": {\n \"name\": \"Kedah\",\n \"days\": {\n \"01-01\": false,\n \"3rd Sunday in June\": {\n \"name\": {\n \"en\": \"Sultan of Kedah's Birthday\",\n \"ms\": \"Hari Keputeraan Sultan Kedah\"\n }\n },\n \"27 Rajab\": {\n \"_name\": \"27 Rajab\"\n },\n \"1 Ramadan\": {\n \"_name\": \"1 Ramadan\"\n },\n \"17 Ramadan\": false,\n \"11 Dhu al-Hijjah\": {\n \"_name\": \"10 Dhu al-Hijjah\"\n },\n \"2016-01-24\": {\n \"_name\": \"Thaipusam\"\n },\n \"2017-02-10\": {\n \"_name\": \"Thaipusam\"\n },\n \"2018-01-31\": {\n \"_name\": \"Thaipusam\"\n },\n \"2019-01-21\": {\n \"_name\": \"Thaipusam\"\n },\n \"2020-02-08\": {\n \"_name\": \"Thaipusam\"\n },\n \"2021-01-28\": {\n \"_name\": \"Thaipusam\"\n },\n \"2022-01-18\": {\n \"_name\": \"Thaipusam\"\n },\n \"2023-02-05\": {\n \"_name\": \"Thaipusam\"\n },\n \"2024-01-25\": {\n \"_name\": \"Thaipusam\"\n },\n \"2025-02-11\": {\n \"_name\": \"Thaipusam\"\n },\n \"2026-02-01\": {\n \"_name\": \"Thaipusam\"\n }\n }\n },\n \"03\": {\n \"name\": \"Kelantan\",\n \"days\": {\n \"01-01\": false,\n \"11 Dhu al-Hijjah\": {\n \"_name\": \"10 Dhu al-Hijjah\"\n },\n \"11-11\": {\n \"name\": {\n \"en\": \"Sultan of Kelantan's Birthday\",\n \"ms\": \"Hari Keputeraan Sultan Kelantan\"\n }\n },\n \"11-12\": {\n \"name\": {\n \"en\": \"Sultan of Kelantan's Birthday\",\n \"ms\": \"Hari Keputeraan Sultan Kelantan\"\n }\n }\n }\n },\n \"04\": {\n \"name\": \"Malacca\",\n \"days\": {\n \"04-15\": {\n \"name\": {\n \"en\": \"Declaration of Malacca City as Historical City\",\n \"ms\": \"Hari Perisytiharan Bandar Melaka sebagai Bandaraya Bersejarah\"\n }\n },\n \"08-24\": {\n \"name\": {\n \"en\": \"Melaka State Governor's Birthday\",\n \"ms\": \"Hari Jadi Yang di-Pertua Negeri Melaka\"\n }\n },\n \"1 Ramadan\": {\n \"_name\": \"1 Ramadan\"\n },\n \"17 Ramadan\": false\n }\n },\n \"05\": {\n \"name\": \"Negeri Sembilan\",\n \"days\": {\n \"01-14\": {\n \"name\": {\n \"en\": \"Yang di-Pertuan Besar of Negeri Sembilan's Birthday\",\n \"ms\": \"Hari Keputeraan Yang di-Pertuan Besar Negeri Sembilan\"\n }\n },\n \"27 Rajab\": {\n \"_name\": \"27 Rajab\"\n },\n \"17 Ramadan\": false,\n \"2016-01-24\": {\n \"_name\": \"Thaipusam\"\n },\n \"2017-02-10\": {\n \"_name\": \"Thaipusam\"\n },\n \"2018-01-31\": {\n \"_name\": \"Thaipusam\"\n },\n \"2019-01-21\": {\n \"_name\": \"Thaipusam\"\n },\n \"2020-02-08\": {\n \"_name\": \"Thaipusam\"\n },\n \"2021-01-28\": {\n \"_name\": \"Thaipusam\"\n },\n \"2022-01-18\": {\n \"_name\": \"Thaipusam\"\n },\n \"2023-02-05\": {\n \"_name\": \"Thaipusam\"\n },\n \"2024-01-25\": {\n \"_name\": \"Thaipusam\"\n },\n \"2025-02-11\": {\n \"_name\": \"Thaipusam\"\n },\n \"2026-02-01\": {\n \"_name\": \"Thaipusam\"\n }\n }\n },\n \"06\": {\n \"name\": \"Pahang\",\n \"days\": {\n \"05-22\": {\n \"name\": {\n \"en\": \"Hari Hol of Pahang\",\n \"ms\": \"Hari Hol Pahang\"\n }\n },\n \"07-30\": {\n \"name\": {\n \"en\": \"Sultan of Pahang's Birthday\",\n \"ms\": \"Hari Keputeraan Sultan Pahang\"\n }\n }\n }\n },\n \"07\": {\n \"name\": \"Penang\",\n \"days\": {\n \"07-07\": {\n \"name\": {\n \"en\": \"Declaration of George Town as World Heritage Site\",\n \"id\": \"Hari Ulang Tahun Perisytiharan Tapak Warisan Dunia\"\n }\n },\n \"2nd Saturday in July\": {\n \"name\": {\n \"en\": \"Penang State Governor's Birthday\",\n \"ms\": \"Hari Jadi Yang di-Pertua Negeri Pulau Pinang\"\n }\n },\n \"2016-01-24\": {\n \"_name\": \"Thaipusam\"\n },\n \"2017-02-10\": {\n \"_name\": \"Thaipusam\"\n },\n \"2018-01-31\": {\n \"_name\": \"Thaipusam\"\n },\n \"2019-01-21\": {\n \"_name\": \"Thaipusam\"\n },\n \"2020-02-08\": {\n \"_name\": \"Thaipusam\"\n },\n \"2021-01-28\": {\n \"_name\": \"Thaipusam\"\n },\n \"2022-01-18\": {\n \"_name\": \"Thaipusam\"\n },\n \"2023-02-05\": {\n \"_name\": \"Thaipusam\"\n },\n \"2024-01-25\": {\n \"_name\": \"Thaipusam\"\n },\n \"2025-02-11\": {\n \"_name\": \"Thaipusam\"\n },\n \"2026-02-01\": {\n \"_name\": \"Thaipusam\"\n }\n }\n },\n \"08\": {\n \"name\": \"Perak\",\n \"days\": {\n \"1st Friday in November\": {\n \"name\": {\n \"en\": \"Sultan of Perak's Birthday\",\n \"ms\": \"Hari Keputeraan Sultan Perak\"\n }\n },\n \"2016-01-24\": {\n \"_name\": \"Thaipusam\"\n },\n \"2017-02-10\": {\n \"_name\": \"Thaipusam\"\n },\n \"2018-01-31\": {\n \"_name\": \"Thaipusam\"\n },\n \"2019-01-21\": {\n \"_name\": \"Thaipusam\"\n },\n \"2020-02-08\": {\n \"_name\": \"Thaipusam\"\n },\n \"2021-01-28\": {\n \"_name\": \"Thaipusam\"\n },\n \"2022-01-18\": {\n \"_name\": \"Thaipusam\"\n },\n \"2023-02-05\": {\n \"_name\": \"Thaipusam\"\n },\n \"2024-01-25\": {\n \"_name\": \"Thaipusam\"\n },\n \"2025-02-11\": {\n \"_name\": \"Thaipusam\"\n },\n \"2026-02-01\": {\n \"_name\": \"Thaipusam\"\n }\n }\n },\n \"09\": {\n \"name\": \"Perlis\",\n \"days\": {\n \"01-01\": false,\n \"07-17\": {\n \"name\": {\n \"en\": \"Raja of Perlis's Birthday\",\n \"id\": \"Hari Keputeraan Raja Perlis\"\n }\n },\n \"27 Rajab\": {\n \"_name\": \"27 Rajab\"\n },\n \"11 Dhu al-Hijjah\": {\n \"_name\": \"10 Dhu al-Hijjah\"\n }\n }\n }\n }\n },\n \"MZ\": {\n \"names\": {\n \"pt\": \"Mo\u00E7ambique\",\n \"en\": \"Mozambique\"\n },\n \"dayoff\": \"sunday\",\n \"langs\": [\n \"pt\"\n ],\n \"zones\": [\n \"Africa/Maputo\"\n ],\n \"days\": {\n \"01-01\": {\n \"_name\": \"01-01\",\n \"name\": {\n \"pt\": \"Dia da Fraternidade universal\"\n }\n },\n \"substitutes 01-01 if sunday then next monday\": {\n \"_name\": \"Public Holiday\"\n },\n \"02-03\": {\n \"name\": {\n \"pt\": \"Dia dos her\u00F3is mo\u00E7ambicanos\",\n \"en\": \"Heroes\u2019 Day\"\n }\n },\n \"substitutes 02-03 if sunday then next monday\": {\n \"_name\": \"Public Holiday\"\n },\n \"04-07\": {\n \"name\": {\n \"pt\": \"Dia da Mulher Mo\u00E7ambicana\",\n \"en\": \"Women\u2019s Day\"\n }\n },\n \"substitutes 04-07 if sunday then next monday\": {\n \"_name\": \"Public Holiday\"\n },\n \"05-01\": {\n \"_name\": \"05-01\",\n \"name\": {\n \"pt\": \"Dia Internacional dos Trabalhadores\",\n \"en\": \"Workers' Day\"\n }\n },\n \"substitutes 05-01 if sunday then next monday\": {\n \"_name\": \"Public Holiday\"\n },\n \"1st sunday in May\": {\n \"_name\": \"Mothers Day\",\n \"type\": \"observance\"\n },\n \"06-25\": {\n \"_name\": \"Independence Day\",\n \"name\": {\n \"pt\": \"Dia da Independ\u00EAncia Nacional\"\n }\n },\n \"substitutes 06-25 if sunday then next monday\": {\n \"_name\": \"Public Holiday\"\n },\n \"09-07\": {\n \"name\": {\n \"pt\": \"Dia da Vit\u00F3ria\",\n \"en\": \"Lusaka Peace Agreement\"\n }\n },\n \"substitutes 09-07 if sunday then next monday\": {\n \"_name\": \"Public Holiday\"\n },\n \"09-25\": {\n \"name\": {\n \"pt\": \"Dia das For\u00E7as Armadas de Liberta\u00E7\u00E3o Nacional\",\n \"en\": \"Defense Force\u2019s Day\"\n }\n },\n \"substitutes 09-25 if sunday then next monday\": {\n \"_name\": \"Public Holiday\"\n },\n \"10-04\": {\n \"name\": {\n \"pt\": \"Dia da Paz e Reconcilia\u00E7\u00E3o\",\n \"en\": \"Peace and Reconciliation Day\"\n }\n },\n \"substitutes 10-04 if sunday then next monday\": {\n \"_name\": \"Public Holiday\"\n },\n \"12-25\": {\n \"_name\": \"12-25\",\n \"name\": {\n \"pt\": \"Dia da Fam\u00EDlia\",\n \"en\": \"Family Day\"\n }\n },\n \"substitutes 12-25 if sunday then next monday\": {\n \"_name\": \"Public Holiday\"\n }\n }\n },\n \"NA\": {\n \"names\": {\n \"en\": \"Namibia\"\n },\n \"dayoff\": \"sunday\",\n \"langs\": [\n \"en\"\n ],\n \"zones\": [\n \"Africa/Windhoek\"\n ],\n \"days\": {\n \"01-01\": {\n \"_name\": \"01-01\"\n },\n \"substitutes 01-01 if sunday then next monday\": {\n \"name\": \"Public Holiday\"\n },\n \"03-21\": {\n \"_name\": \"Independence Day\"\n },\n \"substitutes 03-21 if sunday then next monday\": {\n \"name\": \"Public Holiday\"\n },\n \"easter -2\": {\n \"_name\": \"easter -2\"\n },\n \"easter\": {\n \"_name\": \"easter\",\n \"type\": \"observance\"\n },\n \"easter 1\": {\n \"_name\": \"easter 1\"\n },\n \"05-01\": {\n \"_name\": \"05-01\",\n \"name\": {\n \"en\": \"Workers Day\"\n }\n },\n \"substitutes 05-01 if sunday then next monday\": {\n \"name\": \"Public Holiday\"\n },\n \"05-04\": {\n \"name\": {\n \"en\": \"Cassinga Day\"\n }\n },\n \"substitutes 05-04 if sunday then next monday\": {\n \"name\": \"Public Holiday\"\n },\n \"easter 39\": {\n \"_name\": \"easter 39\"\n },\n \"05-25\": {\n \"name\": {\n \"en\": \"Africa Day\"\n }\n },\n \"substitutes 05-25 if sunday then next monday\": {\n \"name\": \"Public Holiday\"\n },\n \"08-26\": {\n \"name\": {\n \"en\": \"Heroes' Day\"\n }\n },\n \"substitutes 08-26 if sunday then next monday\": {\n \"name\": \"Public Holiday\"\n },\n \"12-10\": {\n \"name\": {\n \"en\": \"Human Rights Day\"\n }\n },\n \"substitutes 12-10 if sunday then next monday\": {\n \"name\": \"Public Holiday\"\n },\n \"12-25\": {\n \"_name\": \"12-25\"\n },\n \"12-26\": {\n \"_name\": \"12-26\",\n \"name\": {\n \"en\": \"Day of Goodwill\"\n }\n },\n \"substitutes 12-26 if sunday then next monday\": {\n \"name\": \"Public Holiday\"\n }\n }\n },\n \"NC\": {\n \"names\": {\n \"fr\": \"Nouvelle-Cal\u00E9donie\",\n \"en\": \"New Caledonia\"\n },\n \"dayoff\": \"sunday\",\n \"zones\": [\n \"Pacific/Noumea\"\n ],\n \"langs\": [\n \"fr\"\n ],\n \"_days\": \"FR\",\n \"days\": {\n \"01-01\": {\n \"name\": {\n \"fr\": \"Jour de l'an\"\n }\n },\n \"09-24\": {\n \"name\": {\n \"fr\": \"F\u00EAte de la Citonneyet\u00E9\",\n \"en\": \"New Caledonia Day\"\n }\n }\n }\n },\n \"NE\": {\n \"names\": {\n \"fr\": \"R\u00E9publique du Niger\",\n \"en\": \"Republic of the Niger\"\n },\n \"langs\": [\n \"fr\"\n ],\n \"zones\": [\n \"Africa/Lagos\"\n ],\n \"dayoff\": \"sunday\",\n \"days\": {\n \"01-01\": {\n \"_name\": \"01-01\"\n },\n \"04-24\": {\n \"name\": {\n \"fr\": \"Journ\u00E9e Nationale de la Concorde\",\n \"en\": \"Concord Day\"\n }\n },\n \"05-01\": {\n \"_name\": \"05-01\"\n },\n \"08-03\": {\n \"_name\": \"Independence Day\",\n \"name\": {\n \"fr\": \"Proclamation de l'ind\u00E9pendance\"\n }\n },\n \"12-18\": {\n \"name\": {\n \"fr\": \"Proclamation de la R\u00E9publique\",\n \"en\": \"Republic Day\"\n }\n },\n \"12-25\": {\n \"_name\": \"12-25\"\n },\n \"easter 1\": {\n \"_name\": \"easter 1\"\n },\n \"1 Shawwal\": {\n \"_name\": \"1 Shawwal\"\n },\n \"10 Dhu al-Hijjah\": {\n \"_name\": \"10 Dhu al-Hijjah\"\n },\n \"12 Rabi al-awwal\": {\n \"_name\": \"12 Rabi al-awwal\"\n },\n \"1 Muharram\": {\n \"_name\": \"1 Muharram\"\n },\n \"27 Ramadan\": {\n \"_name\": \"27 Ramadan\"\n }\n }\n },\n \"NG\": {\n \"names\": {\n \"en\": \"Nigeria\"\n },\n \"langs\": [\n \"en\"\n ],\n \"zones\": [\n \"Africa/Lagos\"\n ],\n \"dayoff\": \"Saturday\",\n \"days\": {\n \"01-01\": {\n \"_name\": \"01-01\"\n },\n \"05-01 and if Saturday then next Monday\": {\n \"substitute\": true,\n \"_name\": \"05-01\",\n \"name\": {\n \"en\": \"Worker's Day\"\n }\n },\n \"05-27\": {\n \"name\": {\n \"en\": \"Children's Day\",\n \"type\": \"school\"\n }\n },\n \"05-29 prior to 2018\": {\n \"name\": {\n \"en\": \"Democracy Day\"\n }\n },\n \"06-12 prior to 2018\": {\n \"name\": {\n \"en\": \"M.K.O Abiola Day\"\n }\n },\n \"06-12 and if Saturday then next Monday since 2018\": {\n \"substitute\": true,\n \"name\": {\n \"en\": \"Democracy Day\"\n }\n },\n \"10-01\": {\n \"_name\": \"Independence Day\"\n },\n \"11-01 since 2020\": {\n \"name\": {\n \"en\": \"National Youth Day\"\n }\n },\n \"12-31\": {\n \"_name\": \"12-31\",\n \"type\": \"observance\"\n },\n \"easter -2\": {\n \"_name\": \"easter -2\"\n },\n \"easter\": {\n \"_name\": \"easter\",\n \"type\": \"observance\"\n },\n \"easter 1\": {\n \"_name\": \"easter 1\"\n },\n \"12-25\": {\n \"_name\": \"12-25\"\n },\n \"12-26\": {\n \"_name\": \"12-26\"\n },\n \"1 Muharram\": {\n \"_name\": \"1 Muharram\"\n },\n \"12 Rabi al-awwal\": {\n \"_name\": \"12 Rabi al-awwal\"\n },\n \"1 Shawwal P2D\": {\n \"_name\": \"1 Shawwal\",\n \"name\": {\n \"en\": \"Id el Fitr\"\n }\n },\n \"10 Dhu al-Hijjah P2D\": {\n \"_name\": \"10 Dhu al-Hijjah\",\n \"name\": {\n \"en\": \"Id el Kabir\"\n }\n }\n }\n },\n \"NI\": {\n \"names\": {\n \"es\": \"Nicaragua\",\n \"en\": \"Nicaragua\"\n },\n \"dayoff\": \"sunday\",\n \"langs\": [\n \"es\"\n ],\n \"zones\": [\n \"America/Managua\"\n ],\n \"days\": {\n \"01-01\": {\n \"_name\": \"01-01\"\n },\n \"01-18\": {\n \"name\": {\n \"en\": \"Birthday of Rub\u00E9n Dar\u00EDo\",\n \"es\": \"Natalicio de Rub\u00E9n Dar\u00EDo\"\n },\n \"type\": \"observance\"\n },\n \"easter -3\": {\n \"_name\": \"easter -3\"\n },\n \"easter -2\": {\n \"_name\": \"easter -2\"\n },\n \"05-01\": {\n \"_name\": \"05-01\"\n },\n \"05-30\": {\n \"_name\": \"Mothers Day\",\n \"name\": {\n \"es\": \"D\u00EDa de la madre nicarag\u00FCense\"\n },\n \"type\": \"observance\"\n },\n \"06-01\": {\n \"name\": {\n \"en\": \"Children's Day\",\n \"es\": \"D\u00EDa del ni\u00F1o\"\n }\n },\n \"06-23\": {\n \"_name\": \"Fathers Day\",\n \"name\": {\n \"es\": \"D\u00EDa del padre nicarag\u00FCense\"\n },\n \"type\": \"observance\"\n },\n \"07-19\": {\n \"name\": {\n \"en\": \"Revolution Day\",\n \"es\": \"Triunfo de la Revoluci\u00F3n Popular\"\n }\n },\n \"09-14\": {\n \"name\": {\n \"en\": \"Battle of San Jacinto\",\n \"es\": \"Batalla de San Jacinto\"\n }\n },\n \"09-15\": {\n \"_name\": \"Independence Day\"\n },\n \"10-12\": {\n \"name\": {\n \"en\": \"Indigenous Resistance Day\",\n \"es\": \"D\u00EDa de la resistencia ind\u00EDgena\"\n }\n },\n \"12-08\": {\n \"_name\": \"12-08\"\n },\n \"12-24\": {\n \"_name\": \"12-24\",\n \"type\": \"observance\"\n },\n \"12-25\": {\n \"_name\": \"12-25\"\n },\n \"12-31\": {\n \"_name\": \"12-31\",\n \"type\": \"observance\"\n }\n }\n },\n \"NL\": {\n \"names\": {\n \"nl\": \"Nederland\",\n \"en\": \"Netherlands\"\n },\n \"dayoff\": \"sunday\",\n \"langs\": [\n \"nl\"\n ],\n \"zones\": [\n \"Europe/Amsterdam\"\n ],\n \"days\": {\n \"01-01\": {\n \"_name\": \"01-01\"\n },\n \"easter -2\": {\n \"_name\": \"easter -2\"\n },\n \"easter\": {\n \"_name\": \"easter\"\n },\n \"easter 1\": {\n \"_name\": \"easter 1\"\n },\n \"04-27 if sunday then previous saturday\": {\n \"name\": {\n \"nl\": \"Koningsdag\"\n }\n },\n \"05-04\": {\n \"name\": {\n \"nl\": \"Nationale Dodenherdenking\"\n },\n \"type\": \"observance\"\n },\n \"05-05\": {\n \"name\": {\n \"nl\": \"Bevrijdingsdag\"\n },\n \"type\": \"observance\"\n },\n \"2nd sunday in May\": {\n \"_name\": \"Mothers Day\",\n \"type\": \"observance\"\n },\n \"3rd sunday in June\": {\n \"_name\": \"Fathers Day\",\n \"type\": \"observance\"\n },\n \"easter 39\": {\n \"_name\": \"easter 39\"\n },\n \"easter 49\": {\n \"_name\": \"easter 49\"\n },\n \"easter 50\": {\n \"_name\": \"easter 50\"\n },\n \"3rd tuesday in September\": {\n \"name\": {\n \"nl\": \"Prinsjesdag\"\n },\n \"note\": \"Scholen in Den Haag geven meestal 1 dag vrij\",\n \"type\": \"observance\"\n },\n \"11-11\": {\n \"_name\": \"11-11\",\n \"type\": \"observance\"\n },\n \"12-05\": {\n \"name\": {\n \"nl\": \"Sinterklaasavond\",\n \"en\": \"St Nicholas' Eve\"\n },\n \"type\": \"observance\"\n },\n \"12-15\": {\n \"name\": {\n \"nl\": \"Koninkrijksdag\",\n \"en\": \"Kingdom Day\"\n },\n \"type\": \"observance\"\n },\n \"12-25\": {\n \"_name\": \"12-25\"\n },\n \"12-26\": {\n \"_name\": \"12-26\"\n },\n \"12-31\": {\n \"_name\": \"12-31\",\n \"type\": \"bank\"\n }\n }\n },\n \"NO\": {\n \"names\": {\n \"no\": \"Norge\",\n \"en\": \"Norway\"\n },\n \"dayoff\": \"sunday\",\n \"langs\": [\n \"no\"\n ],\n \"zones\": [\n \"Europe/Oslo\"\n ],\n \"days\": {\n \"01-01\": {\n \"_name\": \"01-01\"\n },\n \"2nd sunday in February\": {\n \"_name\": \"Mothers Day\",\n \"type\": \"observance\"\n },\n \"easter -49\": {\n \"name\": {\n \"no\": \"Fastelavn\",\n \"en\": \"Carnival\"\n },\n \"type\": \"observance\"\n },\n \"easter -7\": {\n \"_name\": \"easter -7\",\n \"type\": \"observance\"\n },\n \"easter -3\": {\n \"_name\": \"easter -3\"\n },\n \"easter -2\": {\n \"_name\": \"easter -2\"\n },\n \"easter\": {\n \"_name\": \"easter\"\n },\n \"easter 1\": {\n \"_name\": \"easter 1\"\n },\n \"05-01\": {\n \"_name\": \"05-01\"\n },\n \"05-08\": {\n \"_name\": \"Liberation Day\",\n \"type\": \"observance\"\n },\n \"05-17\": {\n \"_name\": \"Constitution Day\",\n \"name\": {\n \"no\": \"17. mai\"\n }\n },\n \"easter 39\": {\n \"_name\": \"easter 39\"\n },\n \"easter 49\": {\n \"_name\": \"easter 49\"\n },\n \"easter 50\": {\n \"_name\": \"easter 50\"\n },\n \"06-23\": {\n \"name\": {\n \"no\": \"Sankthansaften\",\n \"en\": \"Midsummar Eve\"\n },\n \"type\": \"observance\"\n },\n \"2nd sunday in November\": {\n \"_name\": \"Fathers Day\",\n \"type\": \"observance\"\n },\n \"4th sunday before 12-24\": {\n \"name\": {\n \"no\": \"F\u00F8rste s\u00F8ndag i advent\",\n \"en\": \"First Sunday of Advent\"\n },\n \"type\": \"observance\"\n },\n \"3rd sunday before 12-24\": {\n \"name\": {\n \"no\": \"Andre s\u00F8ndag i advent\",\n \"en\": \"Second Sunday of Advent\"\n },\n \"type\": \"observance\"\n },\n \"2nd sunday before 12-24\": {\n \"name\": {\n \"no\": \"Tredje s\u00F8ndag i advent\",\n \"en\": \"Third Sunday of Advent\"\n },\n \"type\": \"observance\"\n },\n \"1st sunday before 12-24\": {\n \"name\": {\n \"no\": \"Fjerde s\u00F8ndag i advent\",\n \"en\": \"Fourth Sunday of Advent\"\n },\n \"type\": \"observance\"\n },\n \"12-24\": {\n \"_name\": \"12-24\",\n \"type\": \"bank\"\n },\n \"12-25\": {\n \"_name\": \"12-25\"\n },\n \"12-26\": {\n \"_name\": \"12-26\"\n },\n \"12-31 14:00 if sunday then 00:00\": {\n \"_name\": \"12-31\",\n \"type\": \"bank\"\n }\n }\n },\n \"NZ\": {\n \"names\": {\n \"en\": \"New Zealand\",\n \"mi\": \"Aotearoa\"\n },\n \"dayoff\": \"sunday\",\n \"langs\": [\n \"en\",\n \"mi\"\n ],\n \"zones\": [\n \"Pacific/Auckland\",\n \"Pacific/Chatham\"\n ],\n \"days\": {\n \"01-01 and if saturday then next monday if sunday then next tuesday\": {\n \"substitute\": true,\n \"_name\": \"01-01\"\n },\n \"01-02 and if saturday then next monday if sunday then next tuesday\": {\n \"substitute\": true,\n \"name\": {\n \"en\": \"Day after New Year's Day\"\n }\n },\n \"02-06 and if saturday,sunday then next monday\": {\n \"substitute\": true,\n \"name\": {\n \"en\": \"Waitangi Day\"\n }\n },\n \"easter -2\": {\n \"_name\": \"easter -2\"\n },\n \"easter\": {\n \"_name\": \"easter\",\n \"type\": \"observance\"\n },\n \"easter 1\": {\n \"_name\": \"easter 1\"\n },\n \"04-25 and if saturday,sunday then next monday\": {\n \"substitute\": true,\n \"name\": {\n \"en\": \"ANZAC Day\"\n }\n },\n \"1st monday in June\": {\n \"name\": {\n \"en\": \"Queen's Birthday\"\n }\n },\n \"4th monday in October\": {\n \"_name\": \"05-01\"\n },\n \"12-25 and if saturday then next monday if sunday then next tuesday\": {\n \"substitute\": true,\n \"_name\": \"12-25\"\n },\n \"12-26 and if saturday then next monday if sunday then next tuesday\": {\n \"substitute\": true,\n \"_name\": \"12-26\"\n },\n \"2022-06-24\": {\n \"name\": {\n \"en\": \"Matariki\"\n }\n },\n \"2023-07-14\": {\n \"name\": {\n \"en\": \"Matariki\"\n }\n },\n \"2024-06-28\": {\n \"name\": {\n \"en\": \"Matariki\"\n }\n },\n \"2025-06-20\": {\n \"name\": {\n \"en\": \"Matariki\"\n }\n },\n \"2026-07-10\": {\n \"name\": {\n \"en\": \"Matariki\"\n }\n },\n \"2027-06-25\": {\n \"name\": {\n \"en\": \"Matariki\"\n }\n },\n \"2028-07-14\": {\n \"name\": {\n \"en\": \"Matariki\"\n }\n },\n \"2029-07-06\": {\n \"name\": {\n \"en\": \"Matariki\"\n }\n },\n \"2030-06-21\": {\n \"name\": {\n \"en\": \"Matariki\"\n }\n },\n \"2031-07-11\": {\n \"name\": {\n \"en\": \"Matariki\"\n }\n },\n \"2032-07-02\": {\n \"name\": {\n \"en\": \"Matariki\"\n }\n },\n \"2033-06-24\": {\n \"name\": {\n \"en\": \"Matariki\"\n }\n },\n \"2034-07-07\": {\n \"name\": {\n \"en\": \"Matariki\"\n }\n },\n \"2035-06-29\": {\n \"name\": {\n \"en\": \"Matariki\"\n }\n },\n \"2036-07-18\": {\n \"name\": {\n \"en\": \"Matariki\"\n }\n },\n \"2037-07-10\": {\n \"name\": {\n \"en\": \"Matariki\"\n }\n },\n \"2038-06-25\": {\n \"name\": {\n \"en\": \"Matariki\"\n }\n },\n \"2039-07-15\": {\n \"name\": {\n \"en\": \"Matariki\"\n }\n },\n \"2040-07-06\": {\n \"name\": {\n \"en\": \"Matariki\"\n }\n },\n \"2041-07-19\": {\n \"name\": {\n \"en\": \"Matariki\"\n }\n },\n \"2042-07-11\": {\n \"name\": {\n \"en\": \"Matariki\"\n }\n },\n \"2043-07-03\": {\n \"name\": {\n \"en\": \"Matariki\"\n }\n },\n \"2044-06-24\": {\n \"name\": {\n \"en\": \"Matariki\"\n }\n },\n \"2045-07-07\": {\n \"name\": {\n \"en\": \"Matariki\"\n }\n },\n \"2046-06-29\": {\n \"name\": {\n \"en\": \"Matariki\"\n }\n },\n \"2047-07-19\": {\n \"name\": {\n \"en\": \"Matariki\"\n }\n },\n \"2048-07-03\": {\n \"name\": {\n \"en\": \"Matariki\"\n }\n },\n \"2049-06-25\": {\n \"name\": {\n \"en\": \"Matariki\"\n }\n },\n \"2050-07-15\": {\n \"name\": {\n \"en\": \"Matariki\"\n }\n },\n \"2051-06-30\": {\n \"name\": {\n \"en\": \"Matariki\"\n }\n },\n \"2052-06-21\": {\n \"name\": {\n \"en\": \"Matariki\"\n }\n },\n \"2022-09-26\": {\n \"name\": {\n \"en\": \"National Day of Mourning for Queen Elizabeth II\"\n }\n }\n },\n \"states\": {\n \"AUK\": {\n \"names\": {\n \"en\": \"Auckland Province\",\n \"mi\": \"T\u0101maki-makau-rau\"\n },\n \"days\": {\n \"01-29 if tuesday,wednesday,thursday then previous monday if friday,saturday,sunday then next monday\": {\n \"name\": {\n \"en\": \"Provincial anniversary day\"\n }\n }\n }\n },\n \"BOP\": {\n \"names\": {\n \"en\": \"Bay of Plenty\",\n \"mi\": \"Te Moana-a-Toi\"\n },\n \"days\": {\n \"01-29 if tuesday,wednesday,thursday then previous monday if friday,saturday,sunday then next monday\": {\n \"name\": {\n \"en\": \"Provincial anniversary day\"\n }\n }\n }\n },\n \"CAN\": {\n \"names\": {\n \"en\": \"Canterbury\",\n \"mi\": \"Waitaha\"\n },\n \"days\": {\n \"friday after 2nd tuesday in November\": {\n \"name\": {\n \"en\": \"Christchurch Show Day\"\n },\n \"note\": \"May differ in parts of North Canterbury\"\n }\n },\n \"regions\": {\n \"Timaru\": {\n \"name\": \"Timaru District\",\n \"days\": {\n \"friday after 2nd tuesday in November\": false,\n \"4th monday in September\": {\n \"name\": {\n \"en\": \"Dominion Day\"\n }\n }\n }\n }\n }\n },\n \"CIT\": {\n \"names\": {\n \"en\": \"Chatham Islands\",\n \"mi\": \"Wharekauri\"\n },\n \"days\": {\n \"11-30 if tuesday,wednesday,thursday then previous monday if friday,saturday,sunday then next monday\": {\n \"name\": {\n \"en\": \"Provincial anniversary day\"\n }\n }\n }\n },\n \"GIS\": {\n \"names\": {\n \"en\": \"Gisborne\",\n \"mi\": \"Te Tai R\u0101whiti\"\n },\n \"days\": {\n \"01-29 if tuesday,wednesday,thursday then previous monday if friday,saturday,sunday then next monday\": {\n \"name\": {\n \"en\": \"Provincial anniversary day\"\n }\n }\n }\n },\n \"HKB\": {\n \"names\": {\n \"en\": \"Hawke's Bay\",\n \"mi\": \"Te Matau-a-M\u0101ui\"\n },\n \"days\": {\n \"friday before 4th monday in October\": {\n \"name\": {\n \"en\": \"Provincial anniversary day\"\n }\n }\n }\n },\n \"MBH\": {\n \"names\": {\n \"en\": \"Marlborough\",\n \"mi\": \"Te Tauihu-o-te-waka\"\n },\n \"days\": {\n \"5th monday in October\": {\n \"name\": {\n \"en\": \"Provincial anniversary day\"\n }\n }\n }\n },\n \"MWT\": {\n \"name\": \"Manawatu-Wanganui\",\n \"days\": {\n \"01-22 if tuesday,wednesday,thursday then previous monday if friday,saturday,sunday then next monday\": {\n \"name\": {\n \"en\": \"Provincial anniversary day\"\n }\n }\n }\n },\n \"NSN\": {\n \"names\": {\n \"en\": \"Nelson\",\n \"mi\": \"Whakat\u016B\"\n },\n \"days\": {\n \"02-01 if tuesday,wednesday,thursday then previous monday if friday,saturday,sunday then next monday\": {\n \"name\": {\n \"en\": \"Provincial anniversary day\"\n }\n }\n }\n },\n \"NTL\": {\n \"names\": {\n \"en\": \"Northland\",\n \"mi\": \"Te Tai Tokerau\"\n },\n \"days\": {\n \"01-29 if tuesday,wednesday,thursday then previous monday if friday,saturday,sunday then next monday\": {\n \"name\": {\n \"en\": \"Provincial anniversary day\"\n }\n }\n }\n },\n \"OTA\": {\n \"names\": {\n \"en\": \"Otago Province\",\n \"mi\": \"\u014Ct\u0101kou\"\n },\n \"days\": {\n \"03-23 if Tuesday,Wednesday,Thursday then previous Monday if Friday,Saturday,Sunday then next Monday if is public holiday then next Monday\": {\n \"name\": {\n \"en\": \"Provincial anniversary day\"\n }\n }\n }\n },\n \"STL\": {\n \"names\": {\n \"en\": \"Southland\",\n \"mi\": \"Murihiku\"\n },\n \"days\": {\n \"easter 2\": {\n \"name\": {\n \"en\": \"Provincial anniversary day\"\n }\n }\n }\n },\n \"TAS\": {\n \"names\": {\n \"en\": \"Tasman\",\n \"mi\": \"Te Tai-o-Aorere\"\n },\n \"days\": {\n \"02-01 if tuesday,wednesday,thursday then previous monday if friday,saturday,sunday then next monday\": {\n \"name\": {\n \"en\": \"Provincial anniversary day\"\n }\n }\n }\n },\n \"TKI\": {\n \"name\": \"Taranaki\",\n \"days\": {\n \"2nd monday in March\": {\n \"name\": {\n \"en\": \"Provincial anniversary day\"\n }\n }\n }\n },\n \"WKO\": {\n \"name\": \"Waikato\",\n \"days\": {\n \"01-29 if tuesday,wednesday,thursday then previous monday if friday,saturday,sunday then next monday\": {\n \"name\": {\n \"en\": \"Provincial anniversary day\"\n }\n }\n }\n },\n \"WGN\": {\n \"names\": {\n \"en\": \"Wellington Province\",\n \"mi\": \"Te Whanga-nui-a-Tara\"\n },\n \"days\": {\n \"01-22 if tuesday,wednesday,thursday then previous monday if friday,saturday,sunday then next monday\": {\n \"name\": {\n \"en\": \"Provincial anniversary day\"\n }\n }\n }\n },\n \"WTC\": {\n \"names\": {\n \"en\": \"Westland\",\n \"mi\": \"Te Tai Poutini\"\n },\n \"days\": {\n \"12-01 if tuesday,wednesday,thursday then previous monday if friday,saturday,sunday then next monday\": {\n \"name\": {\n \"en\": \"Provincial anniversary day\"\n }\n }\n },\n \"regions\": {\n \"Buller\": {\n \"name\": \"Buller district\",\n \"days\": {\n \"12-01 if tuesday,wednesday,thursday then previous monday if friday,saturday,sunday then next monday\": false,\n \"02-01 if tuesday,wednesday,thursday then previous monday if friday,saturday,sunday then next monday\": {\n \"name\": {\n \"en\": \"Provincial anniversary day\"\n }\n }\n }\n }\n }\n }\n }\n },\n \"PA\": {\n \"names\": {\n \"es\": \"Panam\u00E1\",\n \"en\": \"Panama\"\n },\n \"dayoff\": \"sunday\",\n \"langs\": [\n \"es\"\n ],\n \"zones\": [\n \"America/Panama\"\n ],\n \"days\": {\n \"01-01 and if sunday then next monday\": {\n \"substitute\": true,\n \"_name\": \"01-01\"\n },\n \"01-09 and if sunday then next monday\": {\n \"substitute\": true,\n \"name\": {\n \"en\": \"Martyrs' Day\",\n \"es\": \"D\u00EDa de los M\u00E1rtires Ca\u00EDdos en la Gesta Patri\u00F3tica\"\n }\n },\n \"easter -48\": {\n \"_name\": \"easter -48\",\n \"type\": \"observance\"\n },\n \"easter -47\": {\n \"_name\": \"easter -47\"\n },\n \"easter -2\": {\n \"_name\": \"easter -2\"\n },\n \"05-01 and if sunday then next monday\": {\n \"substitute\": true,\n \"_name\": \"05-01\"\n },\n \"07-01 every 5 years since 2014\": {\n \"name\": {\n \"en\": \"Presidential Inauguration\"\n }\n },\n \"11-03 and if sunday then next monday\": {\n \"substitute\": true,\n \"name\": {\n \"en\": \"Separation Day (from Columbia)\",\n \"es\": \"D\u00EDa de la Separaci\u00F3n (de Colombia)\"\n }\n },\n \"11-10 and if sunday then next monday\": {\n \"substitute\": true,\n \"name\": {\n \"es\": \"Primer Grito de Independencia\"\n }\n },\n \"11-28 and if sunday then next monday\": {\n \"substitute\": true,\n \"_name\": \"Independence Day\"\n },\n \"12-08 and if sunday then next monday\": {\n \"substitute\": true,\n \"_name\": \"Mothers Day\"\n },\n \"12-25 and if sunday then next monday\": {\n \"substitute\": true,\n \"_name\": \"12-25\"\n }\n }\n },\n \"PE\": {\n \"names\": {\n \"es\": \"Per\u00FA\",\n \"en\": \"Peru\"\n },\n \"dayoff\": \"sunday\",\n \"langs\": [\n \"es\",\n \"qu\"\n ],\n \"zones\": [\n \"America/Lima\"\n ],\n \"days\": {\n \"01-01\": {\n \"_name\": \"01-01\"\n },\n \"easter -3\": {\n \"_name\": \"easter -3\"\n },\n \"easter -2\": {\n \"_name\": \"easter -2\"\n },\n \"easter\": {\n \"_name\": \"easter\"\n },\n \"05-01\": {\n \"_name\": \"05-01\"\n },\n \"06-29\": {\n \"_name\": \"06-29\"\n },\n \"07-28\": {\n \"_name\": \"Independence Day\"\n },\n \"07-29\": {\n \"_name\": \"Independence Day\"\n },\n \"08-30\": {\n \"name\": {\n \"en\": \"Santa Rosa de Lima\",\n \"es\": \"D\u00EDa de Santa Rosa de Lima\"\n }\n },\n \"10-08\": {\n \"name\": {\n \"en\": \"Battle of Angamos\",\n \"es\": \"Combate de Angamos\"\n }\n },\n \"11-01\": {\n \"_name\": \"11-01\"\n },\n \"12-08\": {\n \"_name\": \"12-08\"\n },\n \"12-25\": {\n \"_name\": \"12-25\"\n }\n },\n \"regions\": {\n \"CUS\": {\n \"name\": \"Cuzco\",\n \"days\": {\n \"06-24\": {\n \"name\": {\n \"en\": \"Festival of the Sun\",\n \"es\": \"Fiesta Inca del Sol\",\n \"qu\": \"Inti Raymi\"\n },\n \"type\": \"observance\"\n }\n }\n }\n }\n },\n \"PH\": {\n \"names\": {\n \"en\": \"Philippines\"\n },\n \"langs\": [\n \"en\",\n \"fil\"\n ],\n \"zones\": [\n \"Asia/Manila\"\n ],\n \"dayoff\": \"sunday\",\n \"days\": {\n \"01-01\": {\n \"_name\": \"01-01\"\n },\n \"01-23\": {\n \"type\": \"observance\",\n \"name\": {\n \"en\": \"First Philippine Republic Day\",\n \"fil\": \"Araw ng Unang Republika ng Pilipinas\"\n }\n },\n \"chinese 01-0-01\": {\n \"type\": \"optional\",\n \"name\": {\n \"en\": \"Chinese New Year\",\n \"fil\": \"Bagong Taon ng mga Tsino\"\n }\n },\n \"02-02\": {\n \"type\": \"observance\",\n \"_name\": \"Constitution Day\"\n },\n \"chinese 01-0-15\": {\n \"type\": \"observance\",\n \"name\": {\n \"en\": \"Lantern Festival\",\n \"fil\": \"Piyesta ng mga Parol Tsino\"\n }\n },\n \"02-25\": {\n \"name\": {\n \"en\": \"EDSA Revolution Anniversary\",\n \"fil\": \"Anibersaryo ng Rebolusyon sa EDSA\"\n },\n \"type\": \"optional\",\n \"note\": \"Non-working Day\"\n },\n \"easter -3\": {\n \"_name\": \"easter -3\"\n },\n \"easter -2\": {\n \"_name\": \"easter -2\"\n },\n \"easter -1\": {\n \"_name\": \"easter -1\",\n \"type\": \"optional\",\n \"note\": \"Non-working Day\"\n },\n \"easter\": {\n \"_name\": \"easter\"\n },\n \"04-09\": {\n \"name\": {\n \"en\": \"Day of Valor\",\n \"fil\": \"Araw ng Kagitingan\"\n }\n },\n \"04-27\": {\n \"type\": \"observance\",\n \"name\": {\n \"en\": \"Lapu-Lapu Day\",\n \"fil\": \"Araw ni Lapu-Lapu\"\n }\n },\n \"05-01\": {\n \"_name\": \"05-01\",\n \"name\": {\n \"en\": \"Labour Day\",\n \"fil\": \"Araw ng mga Manggagawa\"\n }\n },\n \"06-12\": {\n \"_name\": \"Independence Day\"\n },\n \"06-19\": {\n \"type\": \"observance\",\n \"name\": {\n \"en\": \"Jos\u00E9 Rizal's birthday\",\n \"fil\": \"Araw ng Kapanganakan ni Jos\u00E9 Rizal\"\n },\n \"active\": [\n {\n \"from\": \"1961-01-01T00:00:00.000Z\"\n }\n ],\n \"disable\": [\n \"2011-06-19\"\n ]\n },\n \"2011-06-19\": {\n \"name\": {\n \"en\": \"Jos\u00E9 Rizal's birthday\",\n \"fil\": \"Araw ng Kapanganakan ni Jos\u00E9 Rizal\"\n }\n },\n \"07-27\": {\n \"type\": \"observance\",\n \"name\": {\n \"en\": \"Iglesia ni Cristo Day\",\n \"fil\": \"Araw ng Iglesia ni Cristo\"\n }\n },\n \"08-21\": {\n \"name\": {\n \"en\": \"Ninoy Aquino Day\",\n \"fil\": \"Araw ng Kabayanihan ni Ninoy Aquino\"\n },\n \"type\": \"optional\",\n \"note\": \"Non-working Day\"\n },\n \"1st monday before September\": {\n \"name\": {\n \"en\": \"National Heroes' Day\",\n \"fil\": \"Araw ng mga Bayani\"\n }\n },\n \"chinese 08-0-15\": {\n \"type\": \"observance\",\n \"name\": {\n \"en\": \"Mid-Autumn Festival\",\n \"fil\": \"Piyestang Zh\u014Dngqi\u016B Ji\u00E9\"\n }\n },\n \"11-01\": {\n \"_name\": \"11-01\",\n \"type\": \"optional\",\n \"note\": \"Non-working Day\"\n },\n \"11-02\": {\n \"_name\": \"11-02\",\n \"type\": \"optional\",\n \"note\": \"Non-working Day\"\n },\n \"11-30\": {\n \"name\": {\n \"en\": \"Bonifacio Day\",\n \"fil\": \"Araw ng Kapanganakan ni Bonifacio\"\n }\n },\n \"12-08\": {\n \"_name\": \"12-08\",\n \"name\": {\n \"en\": \"Feast of the Immaculate Conception of the Blessed Virgin Mary\",\n \"fil\": \"Pagdiriwang ng Kalinis-linisang Paglilihi sa Mahal na Birheng Maria\"\n },\n \"type\": \"optional\",\n \"note\": \"Non-working Day\"\n },\n \"12-24\": {\n \"_name\": \"12-24\",\n \"type\": \"optional\",\n \"note\": \"Non-working Day\"\n },\n \"12-25\": {\n \"_name\": \"12-25\"\n },\n \"12-30\": {\n \"name\": {\n \"en\": \"Rizal Day\",\n \"fil\": \"Paggunita sa Kamatayan ni Dr. Jose Rizal\"\n }\n },\n \"12-31\": {\n \"_name\": \"12-31\",\n \"type\": \"optional\",\n \"note\": \"Non-working Day\"\n },\n \"1 Muharram\": {\n \"type\": \"observance\",\n \"_name\": \"1 Muharram\"\n },\n \"12 Rabi al-awwal\": {\n \"type\": \"observance\",\n \"_name\": \"12 Rabi al-awwal\"\n },\n \"1 Shawwal\": {\n \"_name\": \"1 Shawwal\"\n },\n \"10 Dhu al-Hijjah\": {\n \"_name\": \"10 Dhu al-Hijjah\"\n }\n }\n },\n \"PL\": {\n \"names\": {\n \"pl\": \"Polska\",\n \"en\": \"Poland\"\n },\n \"dayoff\": \"sunday\",\n \"langs\": [\n \"pl\"\n ],\n \"zones\": [\n \"Europe/Warsaw\"\n ],\n \"days\": {\n \"01-01\": {\n \"_name\": \"01-01\"\n },\n \"01-06\": {\n \"_name\": \"01-06\"\n },\n \"easter\": {\n \"_name\": \"easter\"\n },\n \"easter 1\": {\n \"_name\": \"easter 1\"\n },\n \"05-01\": {\n \"_name\": \"05-01\",\n \"name\": {\n \"pl\": \"\u015Awi\u0119to Pa\u0144stwowe; \u015Awi\u0119to Pracy\"\n }\n },\n \"05-03\": {\n \"name\": {\n \"pl\": \"\u015Awi\u0119to Narodowe Trzeciego Maja\",\n \"en\": \"Constitution Day\"\n }\n },\n \"05-26\": {\n \"_name\": \"Mothers Day\",\n \"type\": \"observance\"\n },\n \"easter 49\": {\n \"_name\": \"easter 49\"\n },\n \"easter 60\": {\n \"_name\": \"easter 60\"\n },\n \"08-15\": {\n \"_name\": \"08-15\"\n },\n \"11-01\": {\n \"_name\": \"11-01\"\n },\n \"11-11\": {\n \"_name\": \"Independence Day\"\n },\n \"12-25\": {\n \"_name\": \"12-25\"\n },\n \"12-26\": {\n \"_name\": \"12-26\"\n }\n }\n },\n \"PM\": {\n \"names\": {\n \"en\": \"St. Pierre & Miquelon\"\n },\n \"langs\": [\n \"fr\"\n ],\n \"zones\": [\n \"America/Miquelon\"\n ],\n \"dayoff\": \"sunday\",\n \"days\": {},\n \"_days\": \"FR\"\n },\n \"PR\": {\n \"names\": {\n \"en\": \"Puerto Rico\"\n },\n \"langs\": [\n \"es\",\n \"en\"\n ],\n \"zones\": [\n \"America/Puerto_Rico\"\n ],\n \"dayoff\": \"sunday\",\n \"_days\": \"US\",\n \"days\": {\n \"01-06\": {\n \"_name\": \"01-06\"\n },\n \"2nd Monday in January\": {\n \"name\": {\n \"es\": \"Natalicio de Eugenio Mar\u00EDa de Hostos\",\n \"en\": \"Birthday of Eugenio Mar\u00EDa de Hostos\"\n }\n },\n \"02-18\": {\n \"name\": {\n \"es\": \"Natalicio de Luis Mu\u00F1oz Mar\u00EDn\",\n \"en\": \"Birthday of Luis Mu\u00F1oz Mar\u00EDn\"\n }\n },\n \"03-02 since 2017\": {\n \"name\": {\n \"es\": \"D\u00EDa de la Ciudadan\u00EDa Americana\",\n \"en\": \"American Citizenship Day\"\n }\n },\n \"03-17\": false,\n \"03-22\": {\n \"name\": {\n \"es\": \"D\u00EDa de la Abolici\u00F3n de Esclavitud\",\n \"en\": \"Emancipation Day\"\n }\n },\n \"04-16\": {\n \"name\": {\n \"es\": \"Natalicio de Jos\u00E9 de Diego\",\n \"en\": \"Birthday of Jos\u00E9 de Diego\"\n }\n },\n \"3rd Monday in July\": {\n \"name\": {\n \"es\": \"Natalicio de Don Luis Mu\u00F1oz Rivera\",\n \"en\": \"Birthday of Don Luis Mu\u00F1oz Rivera\"\n }\n },\n \"07-25\": {\n \"name\": {\n \"es\": \"Constituci\u00F3n de Puerto Rico\",\n \"en\": \"Puerto Rico Constitution Day\"\n }\n },\n \"07-27\": {\n \"name\": {\n \"es\": \"Natalicio de Dr. Jos\u00E9 Celso Barbosa\",\n \"en\": \"Birthday of Dr. Jos\u00E9 Celso Barbosa\"\n }\n },\n \"11-19\": {\n \"name\": {\n \"es\": \"D\u00EDa del Descubrimiento de Puerto Rico\",\n \"en\": \"Discovery of Puerto Rico\"\n }\n }\n }\n },\n \"PT\": {\n \"names\": {\n \"pt\": \"Portugal\",\n \"en\": \"Portugal\"\n },\n \"dayoff\": \"sunday\",\n \"langs\": [\n \"pt\"\n ],\n \"zones\": [\n \"Europe/Lisbon\",\n \"Atlantic/Madeira\",\n \"Atlantic/Azores\"\n ],\n \"days\": {\n \"01-01\": {\n \"_name\": \"01-01\"\n },\n \"easter -47\": {\n \"_name\": \"easter -47\",\n \"type\": \"observance\"\n },\n \"easter -2\": {\n \"_name\": \"easter -2\"\n },\n \"easter\": {\n \"_name\": \"easter\"\n },\n \"04-25\": {\n \"name\": {\n \"pt\": \"Dia da Liberdade\",\n \"en\": \"Liberty Day\"\n }\n },\n \"05-01\": {\n \"_name\": \"05-01\"\n },\n \"1st sunday in May\": {\n \"_name\": \"Mothers Day\",\n \"type\": \"observance\"\n },\n \"easter 60\": {\n \"_name\": \"easter 60\"\n },\n \"06-10\": {\n \"name\": {\n \"pt\": \"Dia de Portugal\",\n \"en\": \"Portugal Day\"\n }\n },\n \"08-15\": {\n \"_name\": \"08-15\"\n },\n \"10-05\": {\n \"name\": {\n \"pt\": \"Implanta\u00E7\u00E3o da Rep\u00FAblica\"\n }\n },\n \"11-01\": {\n \"_name\": \"11-01\"\n },\n \"12-01\": {\n \"name\": {\n \"pt\": \"Restaura\u00E7\u00E3o da Independ\u00EAncia\"\n }\n },\n \"12-08\": {\n \"_name\": \"12-08\"\n },\n \"12-24\": {\n \"_name\": \"12-24\",\n \"type\": \"observance\"\n },\n \"12-25\": {\n \"_name\": \"12-25\"\n },\n \"12-31\": {\n \"_name\": \"12-31\",\n \"type\": \"observance\"\n }\n }\n },\n \"PY\": {\n \"names\": {\n \"es\": \"Paraguay\",\n \"en\": \"Paraguay\"\n },\n \"dayoff\": \"sunday\",\n \"langs\": [\n \"es\"\n ],\n \"zones\": [\n \"America/Asuncion\"\n ],\n \"days\": {\n \"01-01\": {\n \"_name\": \"01-01\"\n },\n \"03-01\": {\n \"disable\": [\n \"2017-03-01\"\n ],\n \"enable\": [\n \"2017-02-27\"\n ],\n \"name\": {\n \"en\": \"Heroes' Day\",\n \"es\": \"Dia de los h\u00E9roes\"\n }\n },\n \"easter -3\": {\n \"_name\": \"easter -3\"\n },\n \"easter -2\": {\n \"_name\": \"easter -2\"\n },\n \"04-30\": {\n \"name\": {\n \"en\": \"Teacher's Day\",\n \"es\": \"D\u00EDa del Maestro\"\n },\n \"type\": \"optional\",\n \"note\": \"Affects educational institutions\"\n },\n \"05-01\": {\n \"_name\": \"05-01\"\n },\n \"05-14\": {\n \"_name\": \"Independence Day\"\n },\n \"05-15\": {\n \"_name\": \"Independence Day\"\n },\n \"06-12\": {\n \"name\": {\n \"en\": \"Chaco Armistice\",\n \"es\": \"D\u00EDa de la Paz del Chaco\"\n },\n \"disable\": [\n \"2020-06-12\"\n ],\n \"enable\": [\n \"2020-06-15\"\n ]\n },\n \"08-15\": {\n \"_name\": \"08-15\",\n \"disable\": [\n \"2017-08-15\"\n ],\n \"enable\": [\n \"2017-08-14\"\n ]\n },\n \"09-29\": {\n \"disable\": [\n \"2017-09-29\"\n ],\n \"enable\": [\n \"2017-10-02\"\n ],\n \"name\": {\n \"en\": \"Boqueron Battle Victory Day\",\n \"es\": \"Victoria de Boquer\u00F3n\"\n }\n },\n \"12-08\": {\n \"_name\": \"12-08\",\n \"name\": {\n \"en\": \"Virgin of Caacupe\",\n \"es\": \"Virgen de Caacup\u00E9\"\n }\n },\n \"12-25\": {\n \"_name\": \"12-25\"\n },\n \"12-31\": {\n \"_name\": \"12-31\",\n \"type\": \"bank\"\n }\n }\n },\n \"RE\": {\n \"names\": {\n \"fr\": \"R\u00E9union\",\n \"en\": \"R\u00E9union\"\n },\n \"langs\": [\n \"fr\"\n ],\n \"zones\": [\n \"Indian/Reunion\"\n ],\n \"dayoff\": \"\",\n \"_days\": \"FR\",\n \"days\": {\n \"12-20\": {\n \"_name\": \"Abolition of Slavery\"\n }\n }\n },\n \"RO\": {\n \"names\": {\n \"ro\": \"Romania\",\n \"en\": \"Romania\"\n },\n \"dayoff\": \"sunday\",\n \"langs\": [\n \"ro\"\n ],\n \"zones\": [\n \"Europe/Bucharest\"\n ],\n \"days\": {\n \"01-01\": {\n \"_name\": \"01-01\"\n },\n \"01-24\": {\n \"name\": {\n \"ro\": \"Ziua Unirii\",\n \"en\": \"Unification Day\"\n }\n },\n \"03-08\": {\n \"name\": {\n \"ro\": \"Ziua Mamei\"\n },\n \"type\": \"observance\"\n },\n \"orthodox -2\": {\n \"_name\": \"easter -2\"\n },\n \"orthodox\": {\n \"_name\": \"easter\"\n },\n \"orthodox 1\": {\n \"_name\": \"easter 1\"\n },\n \"05-01\": {\n \"_name\": \"05-01\"\n },\n \"orthodox 39\": {\n \"_name\": \"easter 39\",\n \"type\": \"observance\"\n },\n \"orthodox 49\": {\n \"_name\": \"easter 49\"\n },\n \"orthodox 50\": {\n \"_name\": \"easter 50\"\n },\n \"1st sunday in May\": {\n \"_name\": \"Mothers Day\",\n \"type\": \"observance\"\n },\n \"06-01\": {\n \"name\": {\n \"ro\": \"Ziua Copilului\",\n \"en\": \"Children's Day\"\n }\n },\n \"06-26\": {\n \"name\": {\n \"ro\": \"Ziua drapelului national\",\n \"en\": \"Flag Day\"\n },\n \"type\": \"observance\"\n },\n \"07-29\": {\n \"name\": {\n \"ro\": \"Ziua Imnului na\u021Bional\",\n \"en\": \"National Anthem Day\"\n },\n \"type\": \"observance\"\n },\n \"08-15\": {\n \"_name\": \"08-15\"\n },\n \"11-30\": {\n \"name\": {\n \"ro\": \"Sf\u00E2ntul Andrei\",\n \"en\": \"St Andrew's Day\"\n }\n },\n \"12-01\": {\n \"name\": {\n \"ro\": \"Ziua na\u021Bional\u0103, Ziua Marii Uniri\",\n \"en\": \"National holiday\"\n }\n },\n \"12-08\": {\n \"_name\": \"Constitution Day\",\n \"type\": \"observance\"\n },\n \"12-25\": {\n \"_name\": \"12-25\"\n },\n \"12-26\": {\n \"_name\": \"12-26\"\n }\n }\n },\n \"RS\": {\n \"names\": {\n \"sr\": \"\u0420\u0435\u043F\u0443\u0431\u043B\u0438\u043A\u0430 \u0421\u0440\u0431\u0438\u0458\u0430\",\n \"en\": \"Serbia\"\n },\n \"langs\": [\n \"sr\"\n ],\n \"zones\": [\n \"Europe/Belgrade\"\n ],\n \"dayoff\": \"sunday\",\n \"days\": {\n \"01-01 if sunday then next tuesday\": {\n \"_name\": \"01-01\"\n },\n \"01-02 if sunday then next monday\": {\n \"_name\": \"01-01\"\n },\n \"julian 12-25\": {\n \"_name\": \"julian 12-25\"\n },\n \"02-15 if sunday then next tuesday\": {\n \"name\": {\n \"sr\": \"\u0414\u0430\u043D \u0434\u0440\u0436\u0430\u0432\u043D\u043E\u0441\u0442\u0438 \u0421\u0440\u0431\u0438\u0458\u0435\",\n \"en\": \"Statehood Day\"\n }\n },\n \"02-16 if sunday then next monday\": {\n \"name\": {\n \"sr\": \"\u0414\u0430\u043D \u0434\u0440\u0436\u0430\u0432\u043D\u043E\u0441\u0442\u0438 \u0421\u0440\u0431\u0438\u0458\u0435\",\n \"en\": \"Statehood Day\"\n }\n },\n \"orthodox -2\": {\n \"_name\": \"orthodox -2\"\n },\n \"orthodox\": {\n \"_name\": \"orthodox\"\n },\n \"orthodox 1\": {\n \"_name\": \"orthodox 1\"\n },\n \"05-01 if sunday then next tuesday\": {\n \"_name\": \"05-01\"\n },\n \"05-02 if sunday then next monday\": {\n \"_name\": \"05-01\"\n },\n \"11-11 if sunday then next monday\": {\n \"name\": {\n \"sr\": \"\u0414\u0430\u043D \u043F\u0440\u0438\u043C\u0438\u0440\u0458\u0430\",\n \"en\": \"Armistice Day\"\n }\n },\n \"easter -2\": {\n \"_name\": \"easter -2\",\n \"type\": \"optional\",\n \"note\": \"Catholic believers\"\n },\n \"easter\": {\n \"_name\": \"easter\",\n \"type\": \"optional\",\n \"note\": \"Catholic believers\"\n },\n \"easter 1\": {\n \"_name\": \"easter 1\",\n \"type\": \"optional\",\n \"note\": \"Catholic believers\"\n },\n \"12-25\": {\n \"_name\": \"12-25\",\n \"type\": \"optional\",\n \"note\": \"Catholic believers\"\n },\n \"10 Dhu al-Hijjah\": {\n \"_name\": \"10 Dhu al-Hijjah\",\n \"type\": \"optional\",\n \"note\": \"Muslim believers\"\n },\n \"1 Shawwal\": {\n \"_name\": \"1 Shawwal\",\n \"type\": \"optional\",\n \"note\": \"Muslim believers\"\n },\n \"10 Tishrei\": {\n \"_name\": \"10 Tishrei\",\n \"type\": \"optional\",\n \"note\": \"Jewish believers\"\n },\n \"julian 01-14\": {\n \"name\": {\n \"sr\": \"\u0421\u0432\u0435\u0442\u0438 \u0421\u0430\u0432\u0430\",\n \"en\": \"Saint Sava Day\"\n },\n \"type\": \"observance\"\n },\n \"04-22\": {\n \"name\": {\n \"sr\": \"\u0414\u0430\u043D \u0441\u0435\u045B\u0430\u045A\u0430 \u043D\u0430 \u0436\u0440\u0442\u0432\u0435 \u0445\u043E\u043B\u043E\u043A\u0430\u0443\u0441\u0442\u0430\",\n \"en\": \"Holocaust Remembrance Day\"\n },\n \"type\": \"observance\"\n },\n \"05-09\": {\n \"name\": {\n \"sr\": \"\u0414\u0430\u043D \u043F\u043E\u0431\u0435\u0434\u0435\",\n \"en\": \"Victory Day\"\n },\n \"type\": \"observance\"\n },\n \"julian 06-15\": {\n \"name\": {\n \"sr\": \"\u0412\u0438\u0434\u043E\u0432\u0434\u0430\u043D\",\n \"en\": \"Saint Vitus Day\"\n },\n \"type\": \"observance\"\n },\n \"10-21\": {\n \"name\": {\n \"sr\": \"\u0414\u0430\u043D \u0441\u0435\u045B\u0430\u045A\u0430 \u043D\u0430 \u0441\u0440\u043F\u0441\u043A\u0435 \u0436\u0440\u0442\u0432\u0435 \u0443 \u0414\u0440\u0443\u0433\u043E\u043C \u0441\u0432\u0435\u0442\u0441\u043A\u043E\u043C \u0440\u0430\u0442\u0443\",\n \"en\": \"World War II Serbian Victims Remembrance Day\"\n },\n \"type\": \"observance\"\n }\n }\n },\n \"RU\": {\n \"names\": {\n \"ru\": \"\u0420\u043E\u0441\u0441\u0438\u044F\",\n \"en\": \"Russia\"\n },\n \"dayoff\": \"sunday\",\n \"langs\": [\n \"ru\"\n ],\n \"zones\": [\n \"Europe/Moscow\",\n \"Europe/Kaliningrad\",\n \"Europe/Simferopol\",\n \"Europe/Volgograd\",\n \"Europe/Samara\",\n \"Asia/Yekaterinburg\",\n \"Asia/Omsk\",\n \"Asia/Novosibirsk\",\n \"Asia/Novokuznetsk\",\n \"Asia/Krasnoyarsk\",\n \"Asia/Irkutsk\",\n \"Asia/Chita\",\n \"Asia/Yakutsk\",\n \"Asia/Khandyga\",\n \"Asia/Vladivostok\",\n \"Asia/Sakhalin\",\n \"Asia/Ust-Nera\",\n \"Asia/Magadan\",\n \"Asia/Srednekolymsk\",\n \"Asia/Kamchatka\",\n \"Asia/Anadyr\"\n ],\n \"days\": {\n \"01-01\": {\n \"_name\": \"01-01\"\n },\n \"01-02 P5D\": {\n \"name\": {\n \"ru\": \"\u041D\u043E\u0432\u043E\u0433\u043E\u0434\u043D\u0438\u0435 \u043A\u0430\u043D\u0438\u043A\u0443\u043B\u044B\",\n \"en\": \"New Year Holiday\"\n }\n },\n \"julian 12-25\": {\n \"_name\": \"12-25\"\n },\n \"01-08\": {\n \"name\": {\n \"ru\": \"\u041D\u043E\u0432\u043E\u0433\u043E\u0434\u043D\u0438\u0435 \u043A\u0430\u043D\u0438\u043A\u0443\u043B\u044B\",\n \"en\": \"New Year Holiday\"\n }\n },\n \"02-23\": {\n \"name\": {\n \"ru\": \"\u0414\u0435\u043D\u044C \u0437\u0430\u0449\u0438\u0442\u043D\u0438\u043A\u0430 \u041E\u0442\u0435\u0447\u0435\u0441\u0442\u0432\u0430\",\n \"en\": \"Defender of the Fatherland Day\"\n }\n },\n \"03-08\": {\n \"_name\": \"03-08\"\n },\n \"05-01\": {\n \"name\": {\n \"ru\": \"\u0414\u0435\u043D\u044C \u0432\u0435\u0441\u043D\u044B \u0438 \u0442\u0440\u0443\u0434\u0430\",\n \"en\": \"Spring and Labour Day\"\n }\n },\n \"05-09\": {\n \"name\": {\n \"ru\": \"\u0414\u0435\u043D\u044C \u041F\u043E\u0431\u0435\u0434\u044B\",\n \"en\": \"Victory Day\"\n }\n },\n \"06-12\": {\n \"name\": {\n \"ru\": \"\u0414\u0435\u043D\u044C \u0420\u043E\u0441\u0441\u0438\u0438\",\n \"en\": \"Russia Day\"\n }\n },\n \"11-04\": {\n \"name\": {\n \"ru\": \"\u0414\u0435\u043D\u044C \u043D\u0430\u0440\u043E\u0434\u043D\u043E\u0433\u043E \u0435\u0434\u0438\u043D\u0441\u0442\u0432\u0430\",\n \"en\": \"Unity Day\"\n }\n }\n }\n },\n \"RW\": {\n \"names\": {\n \"en\": \"Rwanda\",\n \"fr\": \"R\u00E9publique du Rwanda\",\n \"rw\": \"Repubulika y'u Rwanda\"\n },\n \"dayoff\": \"sunday\",\n \"langs\": [\n \"en\",\n \"fr\",\n \"rw\"\n ],\n \"zones\": [\n \"Africa/Maputo\"\n ],\n \"days\": {\n \"01-01\": {\n \"_name\": \"01-01\"\n },\n \"01-02\": {\n \"_name\": \"Public Holiday\"\n },\n \"02-01\": {\n \"name\": {\n \"en\": \"Heroes Day\"\n }\n },\n \"easter -2\": {\n \"_name\": \"easter -2\"\n },\n \"04-07\": {\n \"name\": {\n \"fr\": \"Jour de M\u00E9morial du G\u00E9nocide\",\n \"en\": \"Genocide Memorial Day\"\n }\n },\n \"05-01\": {\n \"_name\": \"05-01\"\n },\n \"07-01\": {\n \"_name\": \"Independence Day\"\n },\n \"07-04\": {\n \"name\": {\n \"fr\": \"Jour de la Lib\u00E9ration\",\n \"en\": \"Liberation Day\"\n }\n },\n \"08-15\": {\n \"_name\": \"08-15\"\n },\n \"1st friday in August\": {\n \"name\": {\n \"rw\": \"Umuganura\",\n \"fr\": \"Journ\u00E9e nationale de r\u00E9colte\",\n \"en\": \"National Harvest Day\"\n }\n },\n \"12-25\": {\n \"_name\": \"12-25\"\n },\n \"12-26\": {\n \"_name\": \"12-26\"\n },\n \"easter 1\": {\n \"_name\": \"easter 1\"\n },\n \"1 Shawwal\": {\n \"_name\": \"1 Shawwal\"\n },\n \"10 Dhu al-Hijjah\": {\n \"_name\": \"10 Dhu al-Hijjah\"\n }\n }\n },\n \"SC\": {\n \"names\": {\n \"en\": \"Seychelles\",\n \"fr\": \"R\u00E9publique des Seychelles\",\n \"crs\": \"Repiblik Sesel\"\n },\n \"langs\": [\n \"en\",\n \"fr\",\n \"crs\"\n ],\n \"zones\": [\n \"Indian/Mahe\"\n ],\n \"dayoff\": \"sunday\",\n \"days\": {\n \"01-01 P2D\": {\n \"_name\": \"01-01\"\n },\n \"easter -2\": {\n \"_name\": \"easter -2\"\n },\n \"easter -1\": {\n \"_name\": \"easter -1\"\n },\n \"easter\": {\n \"_name\": \"easter\"\n },\n \"easter 1\": {\n \"_name\": \"easter 1\"\n },\n \"easter 60\": {\n \"_name\": \"easter 60\"\n },\n \"05-01\": {\n \"_name\": \"05-01\"\n },\n \"06-18\": {\n \"_name\": \"National Holiday\"\n },\n \"06-29\": {\n \"_name\": \"Independence Day\"\n },\n \"08-15\": {\n \"_name\": \"08-15\"\n },\n \"11-01\": {\n \"_name\": \"11-01\"\n },\n \"12-08\": {\n \"_name\": \"12-08\"\n },\n \"12-25\": {\n \"_name\": \"12-25\"\n }\n }\n },\n \"SD\": {\n \"names\": {\n \"ar\": \"\u062C\u0645\u0647\u0648\u0631\u064A\u0629 \u0627\u0644\u0633\u0648\u062F\u0627\u0646\",\n \"en\": \"Sudan\"\n },\n \"langs\": [],\n \"zones\": [\n \"Africa/Khartoum\"\n ],\n \"dayoff\": \"\",\n \"days\": {\n \"01-01\": {\n \"_name\": \"Independence Day\"\n },\n \"12-19\": {\n \"_name\": \"Revolution Day\"\n },\n \"12-25\": {\n \"_name\": \"12-25\"\n },\n \"1 Muharram\": {\n \"_name\": \"1 Muharram\"\n },\n \"12 Rabi al-awwal\": {\n \"_name\": \"12 Rabi al-awwal\"\n },\n \"1 Shawwal P4D\": {\n \"_name\": \"1 Shawwal\"\n },\n \"10 Dhu al-Hijjah P3D\": {\n \"_name\": \"10 Dhu al-Hijjah\"\n },\n \"julian 12-25\": {\n \"_name\": \"julian 12-25\",\n \"name\": {\n \"en\": \"Coptic Christmas\"\n }\n },\n \"orthodox\": {\n \"_name\": \"orthodox\",\n \"name\": {\n \"en\": \"Coptic Easter\"\n }\n }\n }\n },\n \"SE\": {\n \"names\": {\n \"sv\": \"Sverige\",\n \"en\": \"Sweden\"\n },\n \"dayoff\": \"sunday\",\n \"langs\": [\n \"sv\"\n ],\n \"zones\": [\n \"Europe/Stockholm\"\n ],\n \"days\": {\n \"01-01\": {\n \"_name\": \"01-01\"\n },\n \"01-05 12:00\": {\n \"name\": {\n \"sv\": \"Trettondagsafton\"\n },\n \"type\": \"optional\"\n },\n \"01-06\": {\n \"_name\": \"01-06\"\n },\n \"01-13\": {\n \"name\": {\n \"sv\": \"Tjugondag Knut\"\n },\n \"type\": \"observance\"\n },\n \"1st sunday in March\": {\n \"name\": {\n \"sv\": \"Vasaloppet\"\n },\n \"type\": \"observance\"\n },\n \"03-25\": {\n \"name\": {\n \"sv\": \"Marie Beb\u00E5delsedag\",\n \"lat\": \"Annuntiatio Mari\u00E6\"\n },\n \"type\": \"observance\"\n },\n \"04-30 12:00\": {\n \"name\": {\n \"sv\": \"Valborgsm\u00E4ssoafton\",\n \"en\": \"Walpurgis Night\"\n },\n \"type\": \"optional\"\n },\n \"easter -3\": {\n \"_name\": \"easter -3\",\n \"type\": \"observance\"\n },\n \"easter -2\": {\n \"_name\": \"easter -2\"\n },\n \"easter\": {\n \"_name\": \"easter\",\n \"type\": \"observance\"\n },\n \"easter -1\": {\n \"_name\": \"easter -1\",\n \"type\": \"observance\"\n },\n \"easter 1\": {\n \"_name\": \"easter 1\"\n },\n \"05-01\": {\n \"_name\": \"05-01\"\n },\n \"easter 39\": {\n \"_name\": \"easter 39\"\n },\n \"easter 48\": {\n \"name\": {\n \"sv\": \"Pingstafton\",\n \"en\": \"Whitsun Eve\"\n },\n \"type\": \"observance\"\n },\n \"easter 49\": {\n \"_name\": \"easter 49\",\n \"type\": \"public\"\n },\n \"easter 50\": {\n \"_name\": \"easter 50\",\n \"type\": \"observance\"\n },\n \"sunday before 06-01\": {\n \"_name\": \"Mothers Day\",\n \"type\": \"observance\"\n },\n \"06-06\": {\n \"name\": {\n \"sv\": \"Sveriges nationaldag\",\n \"en\": \"National Day\"\n }\n },\n \"friday after 06-19\": {\n \"name\": {\n \"sv\": \"Midsommarafton\",\n \"en\": \"Midsummer Eve\",\n \"fi\": \"Juhannusaatto\"\n },\n \"type\": \"bank\"\n },\n \"saturday after 06-20\": {\n \"name\": {\n \"sv\": \"Midsommardagen\",\n \"en\": \"Midsummer Day\",\n \"fi\": \"Juhannusp\u00E4iv\u00E4\"\n }\n },\n \"friday after 10-30 12:00\": {\n \"name\": {\n \"sv\": \"Allhelgonaafton\",\n \"en\": \"Halloween\"\n },\n \"type\": \"optional\"\n },\n \"saturday after 10-31\": {\n \"_name\": \"11-01\"\n },\n \"11-06\": {\n \"name\": {\n \"sv\": \"Gustav-Adolf-dagen\"\n },\n \"type\": \"observance\"\n },\n \"11-11\": {\n \"name\": {\n \"sv\": \"M\u00E5rtensg\u00E5s\"\n },\n \"type\": \"observance\"\n },\n \"12-10\": {\n \"name\": {\n \"sv\": \"Nobeldagen\"\n },\n \"type\": \"observance\"\n },\n \"12-13\": {\n \"name\": {\n \"sv\": \"Luciadagen\"\n },\n \"type\": \"observance\"\n },\n \"12-24\": {\n \"_name\": \"12-24\",\n \"type\": \"bank\"\n },\n \"12-25\": {\n \"_name\": \"12-25\"\n },\n \"12-26\": {\n \"_name\": \"12-26\"\n },\n \"12-31\": {\n \"_name\": \"12-31\",\n \"type\": \"bank\"\n }\n }\n },\n \"SG\": {\n \"names\": {\n \"en\": \"Singapore\"\n },\n \"langs\": [\n \"en\"\n ],\n \"zones\": [\n \"Asia/Singapore\"\n ],\n \"dayoff\": \"sunday\",\n \"days\": {\n \"01-01\": {\n \"_name\": \"01-01\"\n },\n \"substitutes 01-01 if sunday then next monday\": {\n \"substitute\": true,\n \"_name\": \"01-01\"\n },\n \"chinese 01-0-01\": {\n \"name\": {\n \"en\": \"Chinese New Year\"\n }\n },\n \"chinese 01-0-02\": {\n \"name\": {\n \"en\": \"Chinese New Year\"\n }\n },\n \"substitutes chinese 01-0-01 if sunday then next tuesday\": {\n \"substitute\": true,\n \"name\": {\n \"en\": \"Chinese New Year\"\n }\n },\n \"substitutes chinese 01-0-02 if sunday then next monday\": {\n \"substitute\": true,\n \"name\": {\n \"en\": \"Chinese New Year\"\n }\n },\n \"easter -2\": {\n \"_name\": \"easter -2\"\n },\n \"05-01\": {\n \"_name\": \"05-01\"\n },\n \"substitutes 05-01 if sunday then next monday\": {\n \"substitute\": true,\n \"_name\": \"05-01\"\n },\n \"08-09\": {\n \"name\": {\n \"en\": \"National Day\"\n }\n },\n \"substitutes 08-09 if sunday then next monday\": {\n \"substitute\": true,\n \"name\": {\n \"en\": \"National Day\"\n }\n },\n \"12-25\": {\n \"_name\": \"12-25\"\n },\n \"substitutes 12-25 if sunday then next monday\": {\n \"substitute\": true,\n \"_name\": \"12-25\"\n },\n \"1 Shawwal\": {\n \"_name\": \"1 Shawwal\",\n \"name\": {\n \"en\": \"Hari Raya Puasa\"\n },\n \"disable\": [\n \"2022-05-02\"\n ],\n \"enable\": [\n \"2022-05-03\"\n ]\n },\n \"10 Dhu al-Hijjah\": {\n \"_name\": \"10 Dhu al-Hijjah\",\n \"name\": {\n \"en\": \"Hari Raya Haji\"\n },\n \"disable\": [\n \"2022-07-09\"\n ],\n \"enable\": [\n \"2022-07-10\"\n ]\n },\n \"2001-05-07\": {\n \"_name\": \"Vesak\"\n },\n \"2002-05-27\": {\n \"_name\": \"Vesak\"\n },\n \"2003-05-15\": {\n \"_name\": \"Vesak\"\n },\n \"2004-06-02\": {\n \"_name\": \"Vesak\"\n },\n \"2005-05-23\": {\n \"_name\": \"Vesak\"\n },\n \"2006-05-12\": {\n \"_name\": \"Vesak\"\n },\n \"2007-05-31\": {\n \"_name\": \"Vesak\"\n },\n \"2008-05-19\": {\n \"_name\": \"Vesak\"\n },\n \"2009-05-09\": {\n \"_name\": \"Vesak\"\n },\n \"2010-05-28\": {\n \"_name\": \"Vesak\"\n },\n \"2011-05-17\": {\n \"_name\": \"Vesak\"\n },\n \"2012-05-05\": {\n \"_name\": \"Vesak\"\n },\n \"2013-05-24\": {\n \"_name\": \"Vesak\"\n },\n \"2014-05-13\": {\n \"_name\": \"Vesak\"\n },\n \"2015-06-01\": {\n \"_name\": \"Vesak\"\n },\n \"2016-05-21\": {\n \"_name\": \"Vesak\"\n },\n \"2017-05-10\": {\n \"_name\": \"Vesak\"\n },\n \"2018-05-29\": {\n \"_name\": \"Vesak\"\n },\n \"2019-05-19\": {\n \"_name\": \"Vesak\"\n },\n \"2019-05-20\": {\n \"substitute\": true,\n \"_name\": \"Vesak\"\n },\n \"2020-05-07\": {\n \"_name\": \"Vesak\"\n },\n \"2021-05-26\": {\n \"_name\": \"Vesak\"\n },\n \"2022-05-15\": {\n \"_name\": \"Vesak\"\n },\n \"2022-05-16\": {\n \"substitute\": true,\n \"_name\": \"Vesak\"\n },\n \"2023-05-05\": {\n \"_name\": \"Vesak\"\n },\n \"2024-05-23\": {\n \"_name\": \"Vesak\"\n },\n \"2000-10-26\": {\n \"_name\": \"Deepavali\"\n },\n \"2001-11-14\": {\n \"_name\": \"Deepavali\"\n },\n \"2002-11-03\": {\n \"_name\": \"Deepavali\"\n },\n \"2002-11-04\": {\n \"substitute\": true,\n \"_name\": \"Deepavali\"\n },\n \"2003-10-23\": {\n \"_name\": \"Deepavali\"\n },\n \"2004-11-11\": {\n \"_name\": \"Deepavali\"\n },\n \"2005-11-01\": {\n \"_name\": \"Deepavali\"\n },\n \"2006-10-21\": {\n \"_name\": \"Deepavali\"\n },\n \"2007-11-08\": {\n \"_name\": \"Deepavali\"\n },\n \"2008-10-27\": {\n \"_name\": \"Deepavali\"\n },\n \"2009-10-17\": {\n \"_name\": \"Deepavali\"\n },\n \"2010-11-05\": {\n \"_name\": \"Deepavali\"\n },\n \"2011-10-26\": {\n \"_name\": \"Deepavali\"\n },\n \"2012-11-13\": {\n \"_name\": \"Deepavali\"\n },\n \"2013-11-03\": {\n \"_name\": \"Deepavali\"\n },\n \"2013-11-04\": {\n \"substitute\": true,\n \"_name\": \"Deepavali\"\n },\n \"2014-10-22\": {\n \"_name\": \"Deepavali\"\n },\n \"2015-11-10\": {\n \"_name\": \"Deepavali\"\n },\n \"2016-10-29\": {\n \"_name\": \"Deepavali\"\n },\n \"2017-10-18\": {\n \"_name\": \"Deepavali\"\n },\n \"2018-11-06\": {\n \"_name\": \"Deepavali\"\n },\n \"2019-10-27\": {\n \"_name\": \"Deepavali\"\n },\n \"2019-10-28\": {\n \"substitute\": true,\n \"_name\": \"Deepavali\"\n },\n \"2020-11-14\": {\n \"_name\": \"Deepavali\"\n },\n \"2021-11-04\": {\n \"_name\": \"Deepavali\"\n },\n \"2022-10-24\": {\n \"_name\": \"Deepavali\"\n },\n \"2023-11-13\": {\n \"_name\": \"Deepavali\"\n },\n \"2024-10-31\": {\n \"_name\": \"Deepavali\"\n },\n \"2025-10-20\": {\n \"_name\": \"Deepavali\"\n },\n \"2026-11-09\": {\n \"_name\": \"Deepavali\"\n },\n \"2027-10-28\": {\n \"_name\": \"Deepavali\"\n },\n \"2028-11-15\": {\n \"_name\": \"Deepavali\"\n },\n \"2029-11-05\": {\n \"_name\": \"Deepavali\"\n },\n \"2030-10-25\": {\n \"_name\": \"Deepavali\"\n }\n }\n },\n \"SH\": {\n \"names\": {\n \"en\": \"St. Helena\"\n },\n \"langs\": [\n \"en\"\n ],\n \"zones\": [\n \"Africa/Abidjan\"\n ],\n \"dayoff\": \"sunday\",\n \"days\": {\n \"01-01\": {\n \"_name\": \"01-01\"\n },\n \"substitutes 01-01 if sunday then next monday\": {\n \"substitute\": true,\n \"_name\": \"01-01\"\n },\n \"substitutes 01-01 if saturday then next monday\": {\n \"substitute\": true,\n \"_name\": \"01-01\"\n },\n \"easter -2\": {\n \"_name\": \"easter -2\"\n },\n \"easter\": {\n \"_name\": \"easter\",\n \"type\": \"observance\"\n },\n \"easter 1\": {\n \"_name\": \"easter 1\"\n },\n \"3rd monday in April\": {\n \"name\": {\n \"en\": \"Queen's Birthday\"\n }\n },\n \"05-21\": {\n \"name\": {\n \"en\": \"Saint Helena Day\"\n }\n },\n \"easter 50\": {\n \"_name\": \"easter 50\"\n },\n \"monday before 09-01\": {\n \"name\": {\n \"en\": \"August Bank Holiday\"\n }\n },\n \"12-25\": {\n \"_name\": \"12-25\"\n },\n \"substitutes 12-25 if saturday then next tuesday\": {\n \"substitute\": true,\n \"_name\": \"12-25\"\n },\n \"substitutes 12-25 if sunday then next tuesday\": {\n \"substitute\": true,\n \"_name\": \"12-25\"\n },\n \"12-26\": {\n \"_name\": \"12-26\"\n },\n \"substitutes 12-26 if saturday then next monday\": {\n \"substitute\": true,\n \"_name\": \"12-26\"\n },\n \"substitutes 12-26 if sunday then next monday\": {\n \"substitute\": true,\n \"_name\": \"12-26\"\n }\n },\n \"states\": {\n \"AC\": {\n \"name\": \"Ascension Island\",\n \"days\": {\n \"easter 39\": {\n \"_name\": \"easter 39\"\n }\n }\n },\n \"HL\": {\n \"name\": \"Saint Helena\",\n \"days\": {}\n },\n \"TA\": {\n \"name\": \"Tristan da Cunha\",\n \"days\": {\n \"easter 39\": {\n \"_name\": \"easter 39\"\n },\n \"2012-04-23\": {\n \"name\": {\n \"en\": \"Ratting Day\"\n }\n },\n \"2013-05-03\": {\n \"name\": {\n \"en\": \"Ratting Day\"\n }\n },\n \"2014-05-02\": {\n \"name\": {\n \"en\": \"Ratting Day\"\n }\n },\n \"2015-05-16\": {\n \"name\": {\n \"en\": \"Ratting Day\"\n }\n },\n \"2016-04-30\": {\n \"name\": {\n \"en\": \"Ratting Day\"\n }\n },\n \"2017-05-26\": {\n \"name\": {\n \"en\": \"Ratting Day\"\n }\n },\n \"2018-06-02\": {\n \"name\": {\n \"en\": \"Ratting Day\"\n }\n },\n \"08-14\": {\n \"name\": {\n \"en\": \"Anniversary Day\"\n }\n },\n \"monday before 09-01\": false\n }\n }\n }\n },\n \"SI\": {\n \"names\": {\n \"sl\": \"Republika Slovenija\",\n \"en\": \"Slovenia\"\n },\n \"langs\": [\n \"sl\"\n ],\n \"zones\": [\n \"Europe/Belgrade\"\n ],\n \"dayoff\": \"sunday\",\n \"days\": {\n \"01-01\": {\n \"_name\": \"01-01\"\n },\n \"01-02\": {\n \"_name\": \"01-01\",\n \"active\": [\n {\n \"to\": 1955\n },\n {\n \"from\": 2017\n }\n ]\n },\n \"02-08\": {\n \"name\": {\n \"en\": \"Pre\u0161eren Day, the Slovenian Cultural Holiday\",\n \"sl\": \"Pre\u0161ernov dan, slovenski kulturni praznik\"\n },\n \"active\": [\n {\n \"from\": 1991\n }\n ]\n },\n \"03-08\": {\n \"_name\": \"03-08\",\n \"type\": \"observance\"\n },\n \"04-23\": {\n \"name\": {\n \"sl\": \"Jurjevanje\",\n \"en\": \"St. George's Day\"\n },\n \"type\": \"observance\"\n },\n \"easter -49\": {\n \"name\": {\n \"sl\": \"Pust\",\n \"en\": \"Carnival\"\n },\n \"type\": \"observance\"\n },\n \"easter\": {\n \"_name\": \"easter\"\n },\n \"easter 1\": {\n \"_name\": \"easter 1\"\n },\n \"04-27\": {\n \"name\": {\n \"sl\": \"Dan upora proti okupatorju\",\n \"en\": \"Day of Uprising Against Occupation\"\n }\n },\n \"05-01\": {\n \"_name\": \"05-01\",\n \"name\": {\n \"en\": \"Labour Day\"\n },\n \"active\": [\n {\n \"from\": 1949\n }\n ]\n },\n \"05-02\": {\n \"_name\": \"05-01\",\n \"name\": {\n \"en\": \"Labour Day\"\n },\n \"active\": [\n {\n \"from\": 1949\n }\n ]\n },\n \"easter 49\": {\n \"_name\": \"easter 49\"\n },\n \"06-08\": {\n \"name\": {\n \"sl\": \"Dan Primo\u017Ea Trubarja\",\n \"en\": \"Primo\u017E Trubar Day\"\n },\n \"type\": \"observance\",\n \"active\": [\n {\n \"from\": 2010\n }\n ]\n },\n \"06-25\": {\n \"name\": {\n \"sl\": \"Dan dr\u017Eavnosti\",\n \"en\": \"Statehood Day\"\n },\n \"active\": [\n {\n \"from\": 1991\n }\n ]\n },\n \"08-15\": {\n \"_name\": \"08-15\",\n \"active\": [\n {\n \"from\": 1992\n }\n ]\n },\n \"08-17\": {\n \"name\": {\n \"sl\": \"Zdru\u017Eitev prekmurskih Slovencev z mati\u010Dnim narodom\",\n \"en\": \"Unification of Prekmurje Slovenes with the Mother Nation\"\n },\n \"type\": \"observance\",\n \"active\": [\n {\n \"from\": 2006\n }\n ]\n },\n \"09-15\": {\n \"name\": {\n \"sl\": \"Vrnitev Primorske k mati\u010Dni domovini\",\n \"en\": \"Return of Primorska to the Motherland\"\n },\n \"type\": \"observance\",\n \"active\": [\n {\n \"from\": 2005\n }\n ]\n },\n \"09-23\": {\n \"name\": {\n \"sl\": \"Dan slovenskega \u0161porta\",\n \"en\": \"Slovenian Sports Day\"\n },\n \"type\": \"observance\",\n \"active\": [\n {\n \"from\": 2020\n }\n ]\n },\n \"10-25\": {\n \"name\": {\n \"sl\": \"Dan suverenosti\",\n \"en\": \"Sovereignty Day\"\n },\n \"type\": \"observance\",\n \"active\": [\n {\n \"from\": 2015\n }\n ]\n },\n \"10-31\": {\n \"name\": {\n \"sl\": \"Dan reformacije\",\n \"en\": \"Reformation Day\"\n }\n },\n \"11-01\": {\n \"name\": {\n \"sl\": \"Dan spomina na mrtve\",\n \"en\": \"Day of Remembrance for the Dead\"\n }\n },\n \"11-11\": {\n \"name\": {\n \"sl\": \"Martinovanje\",\n \"en\": \"St. Martin's Day\"\n },\n \"type\": \"observance\"\n },\n \"11-23\": {\n \"name\": {\n \"sl\": \"Dan Rudolfa Maistra\",\n \"en\": \"Rudolf Maister Day\"\n },\n \"type\": \"observance\",\n \"active\": [\n {\n \"from\": 2015\n }\n ]\n },\n \"12-06\": {\n \"name\": {\n \"sl\": \"Miklav\u017E\",\n \"en\": \"Saint Nicholas Day\"\n },\n \"type\": \"observance\"\n },\n \"12-25\": {\n \"_name\": \"12-25\",\n \"active\": [\n {\n \"to\": 1953\n },\n {\n \"from\": 1991\n }\n ]\n },\n \"12-26\": {\n \"name\": {\n \"sl\": \"Dan samostojnosti in enotnosti\",\n \"en\": \"Independence and Unity Day\"\n }\n }\n }\n },\n \"SJ\": {\n \"names\": {\n \"en\": \"Svalbard & Jan Mayen\"\n },\n \"langs\": [\n \"no\"\n ],\n \"zones\": [\n \"Europe/Oslo\"\n ],\n \"dayoff\": \"sunday\",\n \"_days\": \"NO\"\n },\n \"SK\": {\n \"names\": {\n \"sk\": \"Slovensk\u00E1 republika\",\n \"en\": \"Slovakia\"\n },\n \"langs\": [\n \"sk\"\n ],\n \"zones\": [\n \"Europe/Prague\"\n ],\n \"dayoff\": \"sunday\",\n \"days\": {\n \"01-01\": {\n \"_name\": \"01-01\",\n \"name\": {\n \"sk\": \"De\u0148 vzniku Slovenskej republiky\"\n }\n },\n \"01-06\": {\n \"_name\": \"01-06\"\n },\n \"easter -2\": {\n \"_name\": \"easter -2\"\n },\n \"easter\": {\n \"_name\": \"easter\",\n \"type\": \"observance\"\n },\n \"easter 1\": {\n \"_name\": \"easter 1\"\n },\n \"05-01\": {\n \"_name\": \"05-01\"\n },\n \"05-08\": {\n \"name\": {\n \"sk\": \"De\u0148 v\u00ED\u0165azstva nad fa\u0161izmom\",\n \"en\": \"Day of victory over fascism\"\n }\n },\n \"2nd sunday in May\": {\n \"_name\": \"Mothers Day\",\n \"type\": \"observance\"\n },\n \"07-05\": {\n \"name\": {\n \"sk\": \"Sviatok sv\u00E4t\u00E9ho Cyrila a Metoda\",\n \"en\": \"Saints Cyril and Methodius Day\"\n }\n },\n \"08-29\": {\n \"name\": {\n \"sk\": \"V\u00FDro\u010Die Slovensk\u00E9ho n\u00E1rodn\u00E9ho povstania\",\n \"en\": \"Slovak National Uprising anniversary\"\n }\n },\n \"09-01\": {\n \"_name\": \"Constitution Day\"\n },\n \"09-15\": {\n \"name\": {\n \"sk\": \"Sviatok Panny M\u00E1rie Sedembolestnej\",\n \"en\": \"Day of Our Lady of the Seven Sorrows\"\n }\n },\n \"11-01\": {\n \"_name\": \"11-01\"\n },\n \"11-17\": {\n \"name\": {\n \"sk\": \"De\u0148 boja za slobodu a demokraciu\",\n \"en\": \"Struggle for Freedom and Democracy Day\"\n }\n },\n \"12-24\": {\n \"_name\": \"12-24\"\n },\n \"12-25\": {\n \"_name\": \"12-25\"\n },\n \"12-26\": {\n \"_name\": \"12-26\"\n }\n }\n },\n \"SL\": {\n \"names\": {\n \"en\": \"Sierra Leone\"\n },\n \"langs\": [\n \"en\"\n ],\n \"zones\": [\n \"Africa/Abidjan\"\n ],\n \"dayoff\": \"sunday\",\n \"days\": {\n \"01-01 and if Sunday then next Monday\": {\n \"substitute\": true,\n \"_name\": \"01-01\"\n },\n \"02-18 and if Sunday then next Monday\": {\n \"substitute\": true,\n \"name\": {\n \"en\": \"Armed Forces Day\"\n }\n },\n \"03-08 and if Sunday then next Monday\": {\n \"substitute\": true,\n \"_name\": \"03-08\"\n },\n \"04-27 and if Sunday then next Monday\": {\n \"substitute\": true,\n \"_name\": \"Independence Day\"\n },\n \"easter -2\": {\n \"_name\": \"easter -2\"\n },\n \"easter 1\": {\n \"_name\": \"easter 1\"\n },\n \"1 Shawwal and if Sunday then next Monday\": {\n \"substitute\": true,\n \"_name\": \"1 Shawwal\",\n \"name\": {\n \"en\": \"Korit\u00E9\"\n }\n },\n \"10 Dhu al-Hijjah and if Sunday then next Monday\": {\n \"substitute\": true,\n \"_name\": \"10 Dhu al-Hijjah\",\n \"name\": {\n \"en\": \"Tabaski\"\n }\n },\n \"12 Rabi al-awwal and if Sunday then next Monday\": {\n \"substitute\": true,\n \"_name\": \"12 Rabi al-awwal\",\n \"name\": {\n \"en\": \"Mawlid\"\n }\n },\n \"12-25 and if Sunday then next Tuesday\": {\n \"substitute\": true,\n \"_name\": \"12-25\"\n },\n \"12-26 and if Sunday then next Monday\": {\n \"substitute\": true,\n \"_name\": \"12-26\"\n }\n }\n },\n \"SM\": {\n \"names\": {\n \"it\": \"San Marino\",\n \"en\": \"San Marino\"\n },\n \"langs\": [\n \"it\"\n ],\n \"zones\": [\n \"Europe/Rome\"\n ],\n \"dayoff\": \"sunday\",\n \"days\": {\n \"01-01\": {\n \"_name\": \"01-01\"\n },\n \"01-06\": {\n \"_name\": \"01-06\",\n \"name\": {\n \"it\": \"Epifania\"\n }\n },\n \"02-05\": {\n \"name\": {\n \"it\": \"Festa di Sant\u2019Agata\",\n \"en\": \"Feast of Saint Agatha\"\n }\n },\n \"easter\": {\n \"_name\": \"easter\"\n },\n \"easter 1\": {\n \"_name\": \"easter 1\"\n },\n \"03-25\": {\n \"name\": {\n \"it\": \"Anniversario dell'Arengo\",\n \"en\": \"Anniversary of the Arengo\"\n }\n },\n \"04-01\": {\n \"name\": {\n \"it\": \"Cerimonia di investitura dei Capitani Reggenti\",\n \"en\": \"Inauguration Ceremony\"\n }\n },\n \"05-01\": {\n \"_name\": \"05-01\"\n },\n \"2nd sunday in May\": {\n \"_name\": \"Mothers Day\",\n \"type\": \"observance\"\n },\n \"easter 60\": {\n \"_name\": \"easter 60\"\n },\n \"07-28\": {\n \"name\": {\n \"it\": \"Anniversario della caduta del Fascismo e Festa della Libert\u00E0\",\n \"en\": \"Liberation from Fascism\"\n }\n },\n \"08-15\": {\n \"_name\": \"08-15\"\n },\n \"09-03\": {\n \"name\": {\n \"it\": \"Festa di San Marino e di Fondazione della Repubblica\",\n \"en\": \"The Feast of San Marino and the Republic\"\n }\n },\n \"10-01\": {\n \"name\": {\n \"it\": \"Cerimonia di investitura dei Capitani Reggenti\"\n }\n },\n \"11-01\": {\n \"_name\": \"11-01\",\n \"name\": {\n \"it\": \"Tutti i Santi\"\n }\n },\n \"11-02\": {\n \"name\": {\n \"it\": \"Commemorazione dei defunti\",\n \"en\": \"Commemoration of the deceased\"\n }\n },\n \"12-08\": {\n \"_name\": \"12-08\"\n },\n \"12-25\": {\n \"_name\": \"12-25\"\n },\n \"12-26\": {\n \"_name\": \"12-26\"\n },\n \"12-31\": {\n \"_name\": \"12-31\",\n \"type\": \"optional\"\n }\n }\n },\n \"SN\": {\n \"names\": {\n \"fr\": \"R\u00E9publique du S\u00E9n\u00E9gal\",\n \"wo\": \"R\u00E9ewum Senegaal\",\n \"en\": \"Senegal\"\n },\n \"langs\": [\n \"fr\",\n \"wo\"\n ],\n \"zones\": [\n \"Africa/Abidjan\"\n ],\n \"dayoff\": \"sunday\",\n \"days\": {\n \"01-01\": {\n \"_name\": \"01-01\"\n },\n \"04-04\": {\n \"_name\": \"National Holiday\"\n },\n \"05-01\": {\n \"_name\": \"05-01\"\n },\n \"08-15\": {\n \"_name\": \"08-15\"\n },\n \"11-01\": {\n \"_name\": \"11-01\"\n },\n \"12-25\": {\n \"_name\": \"12-25\"\n },\n \"easter 1\": {\n \"_name\": \"easter 1\"\n },\n \"easter 39\": {\n \"_name\": \"easter 39\"\n },\n \"easter 50\": {\n \"_name\": \"easter 50\"\n },\n \"12 Rabi al-awwal\": {\n \"_name\": \"12 Rabi al-awwal\"\n },\n \"1 Shawwal and if sunday then next monday\": {\n \"_name\": \"1 Shawwal\"\n },\n \"10 Dhu al-Hijjah and if sunday then next monday\": {\n \"_name\": \"10 Dhu al-Hijjah\"\n },\n \"10 Muharram\": {\n \"_name\": \"10 Muharram\"\n },\n \"18 Safar\": {\n \"name\": \"Magal de Touba\"\n }\n }\n },\n \"SO\": {\n \"names\": {\n \"so\": \"Jamhuuriyadda Federaalka Soomaaliya\",\n \"ar\": \"\u062C\u0645\u0647\u0648\u0631\u064A\u0629 \u0627\u0644\u0635\u0648\u0645\u0627\u0644 \u0627\u0644\u0641\u062F\u0631\u0627\u0644\u064A\u0629\",\n \"en\": \"Somalia\"\n },\n \"dayoff\": \"?\",\n \"langs\": [\n \"so\",\n \"ar\",\n \"en\"\n ],\n \"zones\": [\n \"Africa/Nairobi\"\n ],\n \"days\": {\n \"01-01\": {\n \"_name\": \"01-01\"\n },\n \"05-01\": {\n \"_name\": \"05-01\"\n },\n \"06-26\": {\n \"name\": {\n \"ar\": \"\u0627\u0633\u062A\u0642\u0644\u0627\u0644 \u0627\u0644\u0635\u0648\u0645\u0627\u0644 \u0627\u0644\u0628\u0631\u064A\u0637\u0627\u0646\u064A\",\n \"en\": \"Independence of British Somaliland\"\n }\n },\n \"07-01\": {\n \"_name\": \"Independence Day\"\n },\n \"10 Muharram\": {\n \"_name\": \"10 Muharram\"\n },\n \"12 Rabi al-awwal\": {\n \"_name\": \"12 Rabi al-awwal\"\n },\n \"1 Shawwal\": {\n \"_name\": \"1 Shawwal\"\n },\n \"10 Dhu al-Hijjah\": {\n \"_name\": \"10 Dhu al-Hijjah\"\n }\n },\n \"states\": {\n \"AW\": {\n \"name\": \"Awdal\",\n \"days\": {\n \"01-01\": false,\n \"05-18 P2D\": {\n \"name\": {\n \"en\": \"Restoration of Somaliland Sovereignty\"\n }\n },\n \"07-01\": false,\n \"1 Muharram\": {\n \"_name\": \"1 Muharram\"\n },\n \"10 Muharram\": false,\n \"27 Rajab\": {\n \"_name\": \"27 Rajab\"\n }\n }\n },\n \"SA\": {\n \"name\": \"Sanaag\",\n \"_days\": [\n \"SO\",\n \"states\",\n \"AW\"\n ]\n },\n \"SO\": {\n \"name\": \"Sool\",\n \"_days\": [\n \"SO\",\n \"states\",\n \"AW\"\n ]\n },\n \"TO\": {\n \"name\": \"Togdheer\",\n \"_days\": [\n \"SO\",\n \"states\",\n \"AW\"\n ]\n },\n \"WO\": {\n \"name\": \"Woqooyi Galbeed\",\n \"_days\": [\n \"SO\",\n \"states\",\n \"AW\"\n ]\n }\n }\n },\n \"SR\": {\n \"names\": {\n \"en\": \"Suriname\"\n },\n \"langs\": [\n \"nl\",\n \"srn\"\n ],\n \"zones\": [\n \"America/Paramaribo\"\n ],\n \"dayoff\": \"sunday\",\n \"days\": {\n \"01-01\": {\n \"_name\": \"01-01\"\n },\n \"chinese 01-0-01\": {\n \"name\": {\n \"nl\": \"Chinees Nieuwjaar\",\n \"en\": \"Chinese New Year\"\n }\n },\n \"02-25\": {\n \"name\": {\n \"nl\": \"Dag van Bevrijding en Vernieuwing\",\n \"en\": \"Day of Liberation and Innovation\"\n }\n },\n \"easter -2\": {\n \"_name\": \"easter -2\"\n },\n \"easter\": {\n \"_name\": \"easter\",\n \"type\": \"observance\"\n },\n \"easter 1\": {\n \"_name\": \"easter 1\"\n },\n \"05-01\": {\n \"_name\": \"05-01\"\n },\n \"07-01\": {\n \"name\": {\n \"nl\": \"Dag der Vrijheden (Keti koti)\",\n \"srn\": \"Keti koti\",\n \"en\": \"Emancipation Day\"\n }\n },\n \"08-09\": {\n \"name\": {\n \"nl\": \"Dag der Inheemsen\",\n \"en\": \"Indigenous People's Day\"\n }\n },\n \"10-10\": {\n \"name\": {\n \"nl\": \"Dag van de Marrons\",\n \"en\": \"Day of the Maroons\"\n }\n },\n \"11-25\": {\n \"_name\": \"Independence Day\"\n },\n \"12-25\": {\n \"_name\": \"12-25\"\n },\n \"12-26\": {\n \"_name\": \"12-26\"\n },\n \"1 Shawwal\": {\n \"_name\": \"1 Shawwal\"\n },\n \"10 Dhu al-Hijjah\": {\n \"_name\": \"10 Dhu al-Hijjah\"\n },\n \"2015-03-06\": {\n \"_name\": \"Holi\"\n },\n \"2016-03-23\": {\n \"_name\": \"Holi\"\n },\n \"2017-03-12\": {\n \"_name\": \"Holi\"\n },\n \"2018-03-02\": {\n \"_name\": \"Holi\"\n },\n \"2019-03-21\": {\n \"_name\": \"Holi\"\n },\n \"2020-03-09\": {\n \"_name\": \"Holi\"\n },\n \"2021-03-28\": {\n \"_name\": \"Holi\"\n },\n \"2022-03-18\": {\n \"_name\": \"Holi\"\n },\n \"2023-03-07\": {\n \"_name\": \"Holi\"\n },\n \"2024-03-25\": {\n \"_name\": \"Holi\"\n },\n \"2025-03-14\": {\n \"_name\": \"Holi\"\n },\n \"2026-03-03\": {\n \"_name\": \"Holi\"\n },\n \"2027-03-22\": {\n \"_name\": \"Holi\"\n },\n \"2028-03-11\": {\n \"_name\": \"Holi\"\n },\n \"2029-03-28\": {\n \"_name\": \"Holi\"\n },\n \"2030-03-19\": {\n \"_name\": \"Holi\"\n },\n \"2014-10-23\": {\n \"_name\": \"Deepavali\"\n },\n \"2015-11-11\": {\n \"_name\": \"Deepavali\"\n },\n \"2016-10-30\": {\n \"_name\": \"Deepavali\"\n },\n \"2017-10-19\": {\n \"_name\": \"Deepavali\"\n },\n \"2018-11-07\": {\n \"_name\": \"Deepavali\"\n },\n \"2019-10-27\": {\n \"_name\": \"Deepavali\"\n },\n \"2020-11-14\": {\n \"_name\": \"Deepavali\"\n },\n \"2021-11-04\": {\n \"_name\": \"Deepavali\"\n },\n \"2022-10-24\": {\n \"_name\": \"Deepavali\"\n },\n \"2023-11-12\": {\n \"_name\": \"Deepavali\"\n },\n \"2024-10-31\": {\n \"_name\": \"Deepavali\"\n },\n \"2025-10-20\": {\n \"_name\": \"Deepavali\"\n },\n \"2026-11-08\": {\n \"_name\": \"Deepavali\"\n },\n \"2027-10-28\": {\n \"_name\": \"Deepavali\"\n },\n \"2028-10-17\": {\n \"_name\": \"Deepavali\"\n },\n \"2029-11-05\": {\n \"_name\": \"Deepavali\"\n },\n \"2030-10-25\": {\n \"_name\": \"Deepavali\"\n }\n }\n },\n \"SS\": {\n \"names\": {\n \"en\": \"South Sudan\"\n },\n \"dayoff\": \"sunday\",\n \"langs\": [\n \"en\"\n ],\n \"zones\": [\n \"Africa/Maputo\"\n ],\n \"days\": {\n \"01-01\": {\n \"_name\": \"01-01\"\n },\n \"01-09\": {\n \"name\": {\n \"en\": \"Peace Agreement Day\"\n }\n },\n \"03-08\": {\n \"_name\": \"03-08\"\n },\n \"05-16\": {\n \"name\": {\n \"en\": \"SPLA Day\"\n }\n },\n \"1st monday in July\": {\n \"_name\": \"Mothers Day\",\n \"type\": \"observance\"\n },\n \"07-09\": {\n \"_name\": \"Independence Day\"\n },\n \"07-30\": {\n \"name\": {\n \"en\": \"Martyrs Day\"\n }\n },\n \"12-25\": {\n \"_name\": \"12-25\"\n },\n \"12-28\": {\n \"name\": {\n \"en\": \"Republic Day\"\n }\n },\n \"12-31\": {\n \"_name\": \"12-31\"\n },\n \"2 Shawwal\": {\n \"_name\": \"1 Shawwal\"\n },\n \"12 Dhu al-Hijjah\": {\n \"_name\": \"10 Dhu al-Hijjah\"\n }\n }\n },\n \"ST\": {\n \"names\": {\n \"pt\": \"S\u00E3o Tom\u00E9 & Pr\u00EDncipe\",\n \"en\": \"S\u00E3o Tom\u00E9 & Pr\u00EDncipe\"\n },\n \"langs\": [\n \"pt\",\n \"en\"\n ],\n \"zones\": [\n \"Africa/Abidjan\"\n ],\n \"dayoff\": \"sunday\",\n \"days\": {\n \"01-01 and if Saturday then previous Friday if Sunday then next Monday\": {\n \"substitute\": true,\n \"_name\": \"01-01\"\n },\n \"02-03 and if Saturday then previous Friday if Sunday then next Monday\": {\n \"substitute\": true,\n \"name\": {\n \"en\": \"Martyrs' Day\",\n \"pt\": \"Dia dos M\u00E1rtires\"\n }\n },\n \"05-01 and if Saturday then previous Friday if Sunday then next Monday\": {\n \"substitute\": true,\n \"_name\": \"05-01\"\n },\n \"07-12 and if Saturday then previous Friday if Sunday then next Monday\": {\n \"substitute\": true,\n \"_name\": \"Independence Day\"\n },\n \"09-06 and if Saturday then previous Friday if Sunday then next Monday\": {\n \"substitute\": true,\n \"name\": {\n \"en\": \"Armed Forces Day\",\n \"pt\": \"Dia das For\u00E7as Armadas\"\n }\n },\n \"09-30 and if Saturday then previous Friday if Sunday then next Monday\": {\n \"substitute\": true,\n \"name\": {\n \"en\": \"Agricultural Reform Day\",\n \"pt\": \"Dia da Reforma Agr\u00E1ria\"\n }\n },\n \"12-21 and if Saturday then previous Friday if Sunday then next Monday\": {\n \"substitute\": true,\n \"name\": {\n \"en\": \"S\u00E3o Tom\u00E9 Day\",\n \"pt\": \"Dia de S\u00E3o Tom\u00E9\"\n }\n },\n \"12-25 and if Saturday then previous Friday if Sunday then next Monday\": {\n \"substitute\": true,\n \"_name\": \"12-25\"\n }\n }\n },\n \"SV\": {\n \"names\": {\n \"es\": \"El Salvador\",\n \"en\": \"El Salvador\"\n },\n \"dayoff\": \"sunday\",\n \"langs\": [\n \"es\"\n ],\n \"zones\": [\n \"America/El_Salvador\"\n ],\n \"days\": {\n \"01-01\": {\n \"_name\": \"01-01\",\n \"type\": \"observance\"\n },\n \"01-16\": {\n \"name\": {\n \"es\": \"Firma de los Acuerdos de Paz\"\n },\n \"type\": \"observance\"\n },\n \"03-08\": {\n \"name\": {\n \"es\": \"D\u00EDa de la Mujer\"\n },\n \"type\": \"observance\"\n },\n \"easter -3\": {\n \"_name\": \"easter -3\"\n },\n \"easter -2\": {\n \"_name\": \"easter -2\"\n },\n \"easter -1\": {\n \"_name\": \"easter -1\"\n },\n \"easter\": {\n \"_name\": \"easter\",\n \"type\": \"observance\"\n },\n \"05-01\": {\n \"_name\": \"05-01\"\n },\n \"05-07\": {\n \"name\": {\n \"en\": \"Soldier's Day\",\n \"es\": \"D\u00EDa del Soldado\"\n },\n \"type\": \"observance\"\n },\n \"05-10\": {\n \"_name\": \"Mothers Day\",\n \"type\": \"optional\",\n \"note\": \"Public Offices only\"\n },\n \"06-17\": {\n \"_name\": \"Fathers Day\",\n \"type\": \"observance\"\n },\n \"06-22\": {\n \"name\": {\n \"es\": \"D\u00EDa del Maestro\"\n },\n \"type\": \"optional\",\n \"note\": \"Dayoff for teachers only\"\n },\n \"08-06\": {\n \"name\": {\n \"es\": \"Celebraci\u00F3n del Divino Salvador del Mundo\"\n }\n },\n \"09-15\": {\n \"_name\": \"Independence Day\"\n },\n \"11-02\": {\n \"_name\": \"11-02\"\n },\n \"12-25\": {\n \"_name\": \"12-25\"\n }\n },\n \"regions\": {\n \"SS\": {\n \"name\": \"San Salvador\",\n \"days\": {\n \"08-03\": {\n \"name\": {\n \"es\": \"Fiestas Agostinas\"\n }\n },\n \"08-05\": {\n \"name\": {\n \"es\": \"Fiestas Agostinas\"\n }\n }\n }\n }\n }\n },\n \"SX\": {\n \"names\": {\n \"en\": \"Sint Maarten\"\n },\n \"langs\": [\n \"nl\"\n ],\n \"zones\": [\n \"America/Curacao\"\n ],\n \"dayoff\": \"sunday\",\n \"days\": {\n \"01-01\": {\n \"_name\": \"01-01\"\n },\n \"easter -2\": {\n \"_name\": \"easter -2\"\n },\n \"easter\": {\n \"_name\": \"easter\"\n },\n \"easter 1\": {\n \"_name\": \"easter 1\"\n },\n \"04-27\": {\n \"name\": {\n \"nl\": \"Koningsdag\",\n \"en\": \"King's Day\"\n }\n },\n \"04-30 if Sunday then next Tuesday prior to 2017\": {\n \"name\": {\n \"nl\": \"Carnaval\",\n \"en\": \"Carnival\"\n }\n },\n \"04-30 if Saturday then previous Friday if Sunday then next Tuesday since 2017\": {\n \"name\": {\n \"nl\": \"Carnaval\",\n \"en\": \"Carnival\"\n }\n },\n \"05-01 if Sunday then next Monday\": {\n \"_name\": \"05-01\"\n },\n \"easter 39\": {\n \"_name\": \"easter 39\"\n },\n \"easter 49\": {\n \"_name\": \"easter 49\"\n },\n \"07-01\": {\n \"name\": {\n \"nl\": \"Emancipatiedag\",\n \"en\": \"Emancipation Day\"\n }\n },\n \"10-09\": {\n \"_name\": \"Constitution Day\"\n },\n \"11-11\": {\n \"name\": {\n \"en\": \"Sint Maarten Day\"\n }\n },\n \"12-25\": {\n \"_name\": \"12-25\"\n },\n \"12-26\": {\n \"_name\": \"12-26\"\n }\n }\n },\n \"SZ\": {\n \"names\": {\n \"ss\": \"Eswatini\",\n \"en\": \"Swaziland\"\n },\n \"langs\": [\n \"ss\",\n \"en\"\n ],\n \"zones\": [\n \"Africa/Johannesburg\"\n ],\n \"dayoff\": \"sunday\",\n \"days\": {\n \"01-01\": {\n \"_name\": \"01-01\"\n },\n \"easter -2\": {\n \"_name\": \"easter -2\"\n },\n \"easter\": {\n \"_name\": \"easter\",\n \"type\": \"observance\"\n },\n \"easter 1\": {\n \"_name\": \"easter 1\"\n },\n \"04-19 and if Saturday, Sunday then next Monday\": {\n \"substitute\": true,\n \"name\": {\n \"en\": \"Birthday of King Mswati III\"\n }\n },\n \"04-25 and if Saturday, Sunday then next Monday\": {\n \"substitute\": true,\n \"name\": {\n \"en\": \"National Flag Day\"\n }\n },\n \"05-01 and if Saturday, Sunday then next Monday\": {\n \"substitute\": true,\n \"_name\": \"05-01\"\n },\n \"easter 39\": {\n \"_name\": \"easter 39\"\n },\n \"07-22 and if Saturday, Sunday then next Monday\": {\n \"substitute\": true,\n \"name\": {\n \"en\": \"Birthday of the late King Sobhuza\"\n }\n },\n \"1st Monday in September\": {\n \"name\": {\n \"ss\": \"Umhlanga Reed Dance\",\n \"en\": \"Umhlanga Reed Dance\"\n }\n },\n \"09-06 and if Saturday, Sunday then next Monday\": {\n \"substitute\": true,\n \"_name\": \"Independence Day\",\n \"name\": {\n \"ss\": \"Somhlolo Day\"\n }\n },\n \"12-25\": {\n \"_name\": \"12-25\"\n },\n \"12-26 and if Sunday then next Monday\": {\n \"_name\": \"12-26\"\n },\n \"12-28 P6D\": {\n \"name\": {\n \"ss\": \"Incwala\",\n \"en\": \"Incwala Festival\"\n }\n }\n }\n },\n \"TC\": {\n \"names\": {\n \"en\": \"Turks & Caicos Islands\"\n },\n \"langs\": [\n \"en\"\n ],\n \"zones\": [\n \"America/Grand_Turk\"\n ],\n \"dayoff\": \"sunday\",\n \"days\": {\n \"01-01 and if Saturday, Sunday then next Monday\": {\n \"_name\": \"01-01\"\n },\n \"2nd Monday in March\": {\n \"name\": {\n \"en\": \"Commonwealth Day\"\n }\n },\n \"easter -2\": {\n \"_name\": \"easter -2\"\n },\n \"easter\": {\n \"_name\": \"easter\",\n \"type\": \"observance\"\n },\n \"easter 1\": {\n \"_name\": \"easter 1\"\n },\n \"1st Monday before 06-01\": {\n \"name\": {\n \"en\": \"National Heroes' Day\"\n }\n },\n \"2nd Monday after 06-02\": {\n \"name\": {\n \"en\": \"Queen's Birthday\"\n }\n },\n \"1st Monday in August\": {\n \"name\": {\n \"en\": \"Emancipation Day\"\n }\n },\n \"1st Friday before 10-01\": {\n \"name\": {\n \"en\": \"National Youth Day\"\n }\n },\n \"2nd Monday in October\": {\n \"name\": {\n \"en\": \"National Heritage Day\"\n }\n },\n \"4th Friday in November\": {\n \"name\": {\n \"en\": \"National Day of Thanksgiving\"\n }\n },\n \"12-25 and if Saturday then next Monday if Sunday then next Tuesday\": {\n \"substitute\": true,\n \"_name\": \"12-25\"\n },\n \"12-26 and if Saturday then next Monday if Sunday then next Tuesday\": {\n \"substitute\": true,\n \"_name\": \"12-26\"\n }\n }\n },\n \"TD\": {\n \"names\": {\n \"ar\": \"\u062C\u0645\u0647\u0648\u0631\u064A\u0629 \u062A\u0634\u0627\u062F\",\n \"fr\": \"R\u00E9publique du Tchad\",\n \"en\": \"Chad\"\n },\n \"langs\": [\n \"ar\",\n \"fr\"\n ],\n \"zones\": [\n \"Africa/Ndjamena\"\n ],\n \"dayoff\": \"sunday\",\n \"days\": {\n \"01-01 and if sunday then next monday\": {\n \"_name\": \"01-01\"\n },\n \"05-01 and if sunday then next monday\": {\n \"_name\": \"05-01\"\n },\n \"08-11 and if sunday then next monday\": {\n \"name\": {\n \"fr\": \"F\u00EAte Nationale (Ind\u00E9pendance)\",\n \"en\": \"Independence Day\"\n }\n },\n \"12-01 and if sunday then next monday\": {\n \"name\": {\n \"fr\": \"Journ\u00E9e de la lib\u00E9ration et de la d\u00E9mocratie\",\n \"en\": \"Freedom and Democracy Day\"\n }\n },\n \"11-01\": {\n \"_name\": \"11-01\"\n },\n \"11-28\": {\n \"name\": {\n \"fr\": \"Anniversaire de la Proclamation de la R\u00E9publique\",\n \"en\": \"Proclamation of the Republic\"\n }\n },\n \"12-25\": {\n \"_name\": \"12-25\"\n },\n \"easter 1\": {\n \"_name\": \"easter 1\"\n },\n \"12 Rabi al-awwal\": {\n \"_name\": \"12 Rabi al-awwal\"\n },\n \"1 Shawwal\": {\n \"_name\": \"1 Shawwal\"\n },\n \"10 Dhu al-Hijjah\": {\n \"_name\": \"10 Dhu al-Hijjah\"\n }\n }\n },\n \"TG\": {\n \"names\": {\n \"fr\": \"R\u00E9publique togolaise\",\n \"en\": \"Togolese Republic\"\n },\n \"dayoff\": \"sunday\",\n \"langs\": [\n \"fr\"\n ],\n \"zones\": [\n \"Africa/Abidjan\"\n ],\n \"days\": {\n \"01-01\": {\n \"_name\": \"01-01\"\n },\n \"01-13\": {\n \"name\": {\n \"fr\": \"Jour de la lib\u00E9ration\",\n \"en\": \"Liberation Day\"\n }\n },\n \"04-27\": {\n \"_name\": \"Independence Day\"\n },\n \"easter 1\": {\n \"_name\": \"easter 1\"\n },\n \"05-01\": {\n \"_name\": \"05-01\"\n },\n \"easter 39\": {\n \"_name\": \"easter 39\"\n },\n \"easter 50\": {\n \"_name\": \"easter 50\"\n },\n \"06-21\": {\n \"name\": {\n \"fr\": \"Journ\u00E9e des Martyrs\",\n \"en\": \"Day of the Martyrs\"\n }\n },\n \"08-15\": {\n \"_name\": \"08-15\"\n },\n \"11-01\": {\n \"_name\": \"11-01\"\n },\n \"12-25\": {\n \"_name\": \"12-25\"\n },\n \"13 Rabi al-awwal\": {\n \"_name\": \"12 Rabi al-awwal\"\n },\n \"2 Shawwal\": {\n \"_name\": \"1 Shawwal\"\n },\n \"11 Dhu al-Hijjah\": {\n \"_name\": \"10 Dhu al-Hijjah\"\n }\n }\n },\n \"TN\": {\n \"names\": {\n \"ar\": \"\u0627\u0644\u062C\u0645\u0647\u0648\u0631\u064A\u0629 \u0627\u0644\u062A\u0648\u0646\u0633\u064A\u0629\",\n \"fr\": \"R\u00E9publique tunisienne\",\n \"en\": \"Tunisia\"\n },\n \"langs\": [\n \"ar\",\n \"fr\"\n ],\n \"zones\": [\n \"Africa/Tunis\"\n ],\n \"dayoff\": \"sunday\",\n \"days\": {\n \"01-01\": {\n \"_name\": \"01-01\"\n },\n \"01-14\": {\n \"name\": {\n \"fr\": \"F\u00EAte de la R\u00E9volution et de la Jeunesse\",\n \"ar\": \"\u0639\u064A\u062F \u0627\u0644\u062B\u0648\u0631\u0629 \u0648 \u0627\u0644\u0634\u0628\u0627\u0628\"\n }\n },\n \"03-20\": {\n \"name\": {\n \"fr\": \"F\u00EAte de l'ind\u00E9pendance\",\n \"ar\": \"\u0639\u064A\u062F \u0627\u0644\u0625\u0633\u062A\u0642\u0644\u0627\u0644\"\n }\n },\n \"04-09\": {\n \"name\": {\n \"fr\": \"Journ\u00E9e des Martyrs\",\n \"ar\": \"\u0639\u064A\u062F \u0627\u0644\u0634\u0647\u062F\u0627\u0621\"\n }\n },\n \"12 Rabi al-awwal\": {\n \"_name\": \"12 Rabi al-awwal\"\n },\n \"1 Muharram\": {\n \"_name\": \"1 Muharram\"\n },\n \"1 Shawwal\": {\n \"_name\": \"1 Shawwal\"\n },\n \"10 Dhu al-Hijjah\": {\n \"_name\": \"10 Dhu al-Hijjah\"\n },\n \"05-01\": {\n \"_name\": \"05-01\"\n },\n \"07-25\": {\n \"name\": {\n \"fr\": \"F\u00EAte de la R\u00E9publique\",\n \"ar\": \"\u0639\u064A\u062F \u0627\u0644\u062C\u0645\u0647\u0648\u0631\u064A\u0629\"\n }\n },\n \"08-13\": {\n \"name\": {\n \"fr\": \"F\u00EAte de la Femme et de la Famille\",\n \"ar\": \"\u0639\u064A\u062F \u0627\u0644\u0645\u0631\u0623\u0629\"\n }\n },\n \"10-15\": {\n \"name\": {\n \"fr\": \"F\u00EAte de l'\u00C9vacuation\",\n \"ar\": \"\u0639\u064A\u062F \u0627\u0644\u062C\u0644\u0627\u0621\"\n }\n }\n }\n },\n \"TO\": {\n \"names\": {\n \"to\": \"Pule\u02BBanga Fakatu\u02BBi \u02BBo Tonga\",\n \"en\": \"Tonga\"\n },\n \"langs\": [\n \"to\",\n \"en\"\n ],\n \"zones\": [\n \"Pacific/Tongatapu\"\n ],\n \"dayoff\": \"sunday\",\n \"days\": {\n \"01-01\": {\n \"_name\": \"01-01\"\n },\n \"easter -2\": {\n \"_name\": \"easter -2\"\n },\n \"easter 1\": {\n \"_name\": \"easter 1\"\n },\n \"04-25\": {\n \"name\": {\n \"en\": \"ANZAC Day\"\n }\n },\n \"06-04 if thursday,friday,saturday,sunday then next monday and if tuesday then previous monday\": {\n \"name\": {\n \"en\": \"Emancipation Day\"\n }\n },\n \"07-04\": {\n \"name\": {\n \"en\": \"Official Birthday of His Majesty King Tupou VI\"\n }\n },\n \"09-17 if thursday,friday,saturday,sunday then next monday and if tuesday then previous monday\": {\n \"name\": {\n \"en\": \"Birthday of His Royal Highness The Crown Prince Tupoto\u02BBa-\u02BBUlukalala\"\n }\n },\n \"11-04 if thursday,friday,saturday,sunday then next monday and if tuesday then previous monday\": {\n \"_name\": \"Constitution Day\",\n \"name\": {\n \"en\": \"Constitutional Day\"\n }\n },\n \"12-04 if thursday,friday,saturday,sunday then next monday and if tuesday then previous monday\": {\n \"name\": {\n \"en\": \"Tupou I Day\"\n }\n },\n \"12-25\": {\n \"_name\": \"12-25\"\n },\n \"12-26\": {\n \"_name\": \"12-26\"\n }\n }\n },\n \"TR\": {\n \"names\": {\n \"tr\": \"T\u00FCrkiye\",\n \"en\": \"Turkey\"\n },\n \"dayoff\": \"saturday\",\n \"langs\": [\n \"tr\"\n ],\n \"zones\": [\n \"Europe/Istanbul\"\n ],\n \"days\": {\n \"01-01\": {\n \"_name\": \"01-01\"\n },\n \"04-23\": {\n \"name\": {\n \"en\": \"National Sovereignty and Children's Day\",\n \"tr\": \"Ulusal Egemenlik ve \u00C7ocuk Bayram\u0131\"\n }\n },\n \"05-01\": {\n \"_name\": \"05-01\",\n \"name\": {\n \"en\": \"Labour and Solidarity Day\",\n \"tr\": \"Emek ve Dayan\u0131\u015Fma G\u00FCn\u00FC\"\n }\n },\n \"05-19\": {\n \"name\": {\n \"en\": \"Commemoration of Atat\u00FCrk, Youth and Sports Day\",\n \"tr\": \"Atat\u00FCrk'\u00FC Anma Gen\u00E7lik ve Spor Bayram\u0131\"\n }\n },\n \"07-15\": {\n \"name\": {\n \"en\": \"Democracy and National Unity Day\",\n \"tr\": \"Demokrasi ve Mill\u00EE Birlik G\u00FCn\u00FC\"\n }\n },\n \"08-30\": {\n \"name\": {\n \"en\": \"Victory Day\",\n \"tr\": \"Zafer Bayram\u0131\"\n }\n },\n \"10-29\": {\n \"name\": {\n \"en\": \"Republic Day\",\n \"tr\": \"Cumhuriyet Bayram\u0131\"\n }\n },\n \"1 Shawwal PT90H\": {\n \"_name\": \"1 Shawwal\"\n },\n \"10 Dhu al-Hijjah PT114H\": {\n \"_name\": \"10 Dhu al-Hijjah\"\n }\n }\n },\n \"TT\": {\n \"names\": {\n \"en\": \"Trinidad & Tobago\"\n },\n \"langs\": [\n \"en\"\n ],\n \"zones\": [\n \"America/Port_of_Spain\"\n ],\n \"dayoff\": \"sunday\",\n \"days\": {\n \"01-01 and if Sunday then next Monday\": {\n \"substitute\": true,\n \"_name\": \"01-01\"\n },\n \"easter -2\": {\n \"_name\": \"easter -2\"\n },\n \"easter\": {\n \"_name\": \"easter\"\n },\n \"easter 1\": {\n \"_name\": \"easter 1\",\n \"type\": \"observance\"\n },\n \"03-30 and if Sunday then next Monday\": {\n \"substitute\": true,\n \"name\": {\n \"en\": \"Spiritual Baptist Liberation Day\"\n }\n },\n \"easter 60\": {\n \"_name\": \"easter 60\"\n },\n \"05-30 and if Sunday then next Monday\": {\n \"substitute\": true,\n \"name\": {\n \"en\": \"Indian Arrival Day\"\n }\n },\n \"06-19 and if Sunday then next Monday\": {\n \"substitute\": true,\n \"_name\": \"05-01\"\n },\n \"08-01 and if Sunday then next Monday\": {\n \"substitute\": true,\n \"name\": {\n \"en\": \"Emancipation Day\"\n }\n },\n \"08-31 and if Sunday then next Monday\": {\n \"substitute\": true,\n \"_name\": \"Independence Day\"\n },\n \"09-24 and if Sunday then next Monday\": {\n \"substitute\": true,\n \"name\": {\n \"en\": \"Republic Day\"\n }\n },\n \"12-25 and if Sunday then next Tuesday\": {\n \"substitute\": true,\n \"_name\": \"12-25\"\n },\n \"12-26 and if Sunday then next Monday\": {\n \"substitute\": true,\n \"_name\": \"12-26\"\n },\n \"1 Shawwal and if Sunday then next Monday\": {\n \"substitute\": true,\n \"_name\": \"1 Shawwal\"\n },\n \"2012-11-13\": {\n \"_name\": \"Deepavali\"\n },\n \"2013-11-03\": {\n \"_name\": \"Deepavali\"\n },\n \"2013-11-04\": {\n \"substitute\": true,\n \"_name\": \"Deepavali\"\n },\n \"2014-10-23\": {\n \"_name\": \"Deepavali\"\n },\n \"2015-11-11\": {\n \"_name\": \"Deepavali\"\n },\n \"2016-10-29\": {\n \"_name\": \"Deepavali\"\n },\n \"2017-10-19\": {\n \"_name\": \"Deepavali\"\n },\n \"2018-11-07\": {\n \"_name\": \"Deepavali\"\n },\n \"2019-10-27\": {\n \"_name\": \"Deepavali\"\n },\n \"2019-10-28\": {\n \"substitute\": true,\n \"_name\": \"Deepavali\"\n },\n \"2020-11-14\": {\n \"_name\": \"Deepavali\"\n },\n \"2021-11-04\": {\n \"_name\": \"Deepavali\"\n },\n \"2022-10-24\": {\n \"_name\": \"Deepavali\"\n },\n \"2023-11-12\": {\n \"_name\": \"Deepavali\"\n },\n \"2023-11-13\": {\n \"substitute\": true,\n \"_name\": \"Deepavali\"\n },\n \"2024-10-31\": {\n \"_name\": \"Deepavali\"\n },\n \"2025-10-20\": {\n \"_name\": \"Deepavali\"\n },\n \"2026-11-08\": {\n \"_name\": \"Deepavali\"\n },\n \"2026-11-09\": {\n \"substitute\": true,\n \"_name\": \"Deepavali\"\n },\n \"2027-10-28\": {\n \"_name\": \"Deepavali\"\n },\n \"2028-10-17\": {\n \"_name\": \"Deepavali\"\n },\n \"2029-11-05\": {\n \"_name\": \"Deepavali\"\n },\n \"2030-10-25\": {\n \"_name\": \"Deepavali\"\n }\n }\n },\n \"TW\": {\n \"names\": {\n \"zh\": \"\u4E2D\u83EF\u6C11\u570B\",\n \"en\": \"Taiwan\"\n },\n \"langs\": [\n \"zh\"\n ],\n \"zones\": [\n \"Asia/Taipei\"\n ],\n \"dayoff\": \"\",\n \"days\": {\n \"01-01 and if Saturday then previous Friday if Sunday then next Monday\": {\n \"substitute\": true,\n \"_name\": \"01-01\",\n \"name\": {\n \"zh\": \"\u4E2D\u83EF\u6C11\u570B\u958B\u570B\u7D00\u5FF5\u65E5 / \u5143\u65E6\",\n \"en\": \"Founding of the Republic of China\"\n }\n },\n \"chinese 01-0-00\": {\n \"name\": {\n \"en\": \"Chinese New Year's Eve\",\n \"zh\": \"\u8FB2\u66C6\u9664\u5915\"\n }\n },\n \"chinese 01-0-01\": {\n \"name\": {\n \"en\": \"Chinese New Year\",\n \"zh\": \"\u8FB2\u66C6\u5E74\u521D\u4E00\"\n }\n },\n \"chinese 01-0-01 if Monday then next Friday if Tuesday then next Saturdayif Wednesday then next Sunday if Thursday then next Monday if Friday then next Tuesday if Saturday then next Wednesday if Sunday then next Thursday\": {\n \"name\": {\n \"en\": \"Chinese New Year Holiday\",\n \"zh\": \"\u519C\u5386\u65B0\u5E74\u5047\u671F\"\n }\n },\n \"chinese 01-0-02\": {\n \"name\": {\n \"en\": \"The second day of the Chinese New Year\",\n \"zh\": \"\u8FB2\u66C6\u5E74\u521D\u4E8C\"\n }\n },\n \"chinese 01-0-03\": {\n \"name\": {\n \"en\": \"The third day of the Chinese New Year\",\n \"zh\": \"\u8FB2\u66C6\u5E74\u521D\u4E09\"\n }\n },\n \"chinese 01-0-04\": {\n \"name\": {\n \"en\": \"The forth day of the Chinese New Year\",\n \"zh\": \"\u8FB2\u66C6\u5E74\u521D\u56DB\"\n }\n },\n \"02-28 and if Sunday then next Monday\": {\n \"substitute\": true,\n \"name\": {\n \"en\": \"Peace Memorial Day\",\n \"zh\": \"228\u548C\u5E73\u7D00\u5FF5\u65E5\"\n }\n },\n \"04-04 and if Sunday then next Monday\": {\n \"substitute\": true,\n \"name\": {\n \"en\": \"Children's Day\",\n \"zh\": \"\u5152\u7AE5\u7BC0\"\n }\n },\n \"chinese 5-01 solarterm and if Sunday then next Monday\": {\n \"substitute\": true,\n \"name\": {\n \"en\": \"Tomb Sweeping Day\",\n \"zh\": \"\u6DF8\u660E\u7BC0\"\n }\n },\n \"chinese 05-0-05 and if Sunday then next Monday\": {\n \"substitute\": true,\n \"name\": {\n \"en\": \"Dragon Boat Festival\",\n \"zh\": \"\u7AEF\u5348\u7BC0\"\n }\n },\n \"chinese 08-0-15 and if Sunday then next Monday\": {\n \"substitute\": true,\n \"name\": {\n \"en\": \"Mid-Autumn Festival\",\n \"zh\": \"\u4E2D\u79CB\u7BC0\"\n }\n },\n \"10-10 and if Sunday then next Monday\": {\n \"substitute\": true,\n \"name\": {\n \"en\": \"National Day / Double Tenth Day\",\n \"zh\": \"\u570B\u6176\u65E5 / \u96D9\u5341\u7BC0\"\n }\n },\n \"02-04\": {\n \"name\": {\n \"en\": \"Farmer's Day\",\n \"zh\": \"\u8FB2\u6C11\u7BC0\"\n },\n \"type\": \"observance\"\n },\n \"03-08\": {\n \"_name\": \"03-08\",\n \"type\": \"observance\"\n },\n \"03-12\": {\n \"name\": {\n \"en\": \"Arbor Day\",\n \"zh\": \"\u570B\u7236\u901D\u4E16\u7D00\u5FF5\u65E5\"\n },\n \"type\": \"observance\"\n },\n \"03-29\": {\n \"name\": {\n \"en\": \"Youth Day\",\n \"zh\": \"\u9751\u5E74\u7BC0\"\n },\n \"type\": \"observance\"\n },\n \"05-01 and if Saturday then previous Friday if Sunday then next Monday\": {\n \"substitute\": true,\n \"_name\": \"05-01\",\n \"name\": {\n \"zh\": \"\u52DE\u52D5\u7BC0\"\n },\n \"type\": \"observance\",\n \"note\": \"private sector\"\n },\n \"05-04\": {\n \"name\": {\n \"en\": \"Literary Day\",\n \"zh\": \"\u6587\u85DD\u7BC0\"\n },\n \"type\": \"observance\"\n },\n \"2nd Sunday in May\": {\n \"_name\": \"Mothers Day\",\n \"name\": {\n \"zh\": \"\u6BCD\u89AA\u7BC0\"\n },\n \"type\": \"observance\"\n },\n \"06-03\": {\n \"name\": {\n \"en\": \"Opium Suppression Movement Day\",\n \"zh\": \"\u7981\u83F8\u7BC0\"\n },\n \"type\": \"observance\"\n },\n \"08-08\": {\n \"_name\": \"Fathers Day\",\n \"name\": {\n \"zh\": \"\u7236\u89AA\u7BC0\"\n },\n \"type\": \"observance\"\n },\n \"09-01\": {\n \"name\": {\n \"en\": \"Journalist' Day\",\n \"zh\": \"\u8A18\u8005\u7BC0\"\n },\n \"type\": \"observance\"\n },\n \"09-03\": {\n \"name\": {\n \"en\": \"Armed Forces Day\",\n \"zh\": \"\u8ECD\u4EBA\u7BC0\"\n },\n \"type\": \"observance\"\n },\n \"09-28\": {\n \"name\": {\n \"en\": \"Teachers' Day\",\n \"zh\": \"\u5B54\u5B50\u8A95\u8FB0\u7D00\u5FF5\u65E5\"\n },\n \"type\": \"observance\"\n },\n \"10-21\": {\n \"name\": {\n \"en\": \"Overseas Chinese Day\",\n \"zh\": \"\u83EF\u50D1\u7BC0\"\n },\n \"type\": \"observance\"\n },\n \"10-25\": {\n \"name\": {\n \"en\": \"Taiwan Retrocession Day\",\n \"zh\": \"\u81FA\u7063\u5149\u5FA9\u7BC0\"\n },\n \"type\": \"observance\"\n },\n \"11-12\": {\n \"name\": {\n \"en\": \"Sun Yat-sen's Birthday\",\n \"zh\": \"\u570B\u7236\u8A95\u8FB0\u7D00\u5FF5\u65E5\"\n },\n \"note\": \"Also Doctors' Day and Cultural Renaissance Day\",\n \"type\": \"observance\"\n },\n \"december solstice\": {\n \"name\": {\n \"en\": \"Dongzhi Festival\",\n \"zh\": \"\u51AC\u81F3\"\n },\n \"type\": \"observance\"\n },\n \"12-25\": {\n \"name\": {\n \"en\": \"Constitution Day\",\n \"zh\": \"\u884C\u61B2\u7D00\u5FF5\u65E5\"\n },\n \"type\": \"observance\"\n },\n \"chinese 01-0-15\": {\n \"name\": {\n \"en\": \"Lantern Festival\",\n \"zh\": \"\u5143\u5BB5\u7BC0\"\n },\n \"type\": \"observance\"\n },\n \"chinese 01-0-15 #1\": {\n \"name\": {\n \"en\": \"Tourism Day\",\n \"zh\": \"\u89C0\u5149\u7BC0\"\n },\n \"type\": \"observance\"\n },\n \"chinese 02-0-02\": {\n \"name\": {\n \"en\": \"Earth God's Birthday\",\n \"zh\": \"\u571F\u5730\u516C\u8A95\u8FB0\"\n },\n \"type\": \"observance\"\n },\n \"chinese 02-0-19\": {\n \"name\": {\n \"en\": \"Kuan Yin's Birthday\",\n \"zh\": \"\u89C0\u97F3\u8A95\u8FB0\"\n },\n \"type\": \"observance\"\n },\n \"chinese 03-0-15\": {\n \"name\": {\n \"en\": \"God of Medicine's Birthday\",\n \"zh\": \"\u4FDD\u751F\u5927\u5E1D\u8A95\u8FB0\"\n },\n \"type\": \"observance\"\n },\n \"chinese 03-0-23\": {\n \"name\": {\n \"en\": \"Matsu's Birthday\",\n \"zh\": \"\u5ABD\u7956\u8A95\u8FB0\"\n },\n \"type\": \"observance\"\n },\n \"chinese 04-0-08\": {\n \"name\": {\n \"en\": \"Buddha's Birthday\",\n \"zh\": \"\u4F5B\u8A95\u65E5\"\n },\n \"type\": \"observance\"\n },\n \"chinese 05-0-13\": {\n \"name\": {\n \"en\": \"Kuan Kung's Birthday\",\n \"zh\": \"\u95DC\u516C\u8A95\u8FB0\"\n },\n \"type\": \"observance\"\n },\n \"chinese 05-0-13 #1\": {\n \"name\": {\n \"en\": \"Cheng Huang's Birthday\",\n \"zh\": \"\u57CE\u968D\u723A\u8A95\u8FB0\"\n },\n \"type\": \"observance\"\n },\n \"chinese 07-0-07\": {\n \"name\": {\n \"en\": \"Qixi Festival\",\n \"zh\": \"\u4E03\u5915\"\n },\n \"type\": \"observance\"\n },\n \"chinese 07-0-15\": {\n \"name\": {\n \"en\": \"Ghost Festival\",\n \"zh\": \"\u4E2D\u5143\u7BC0\"\n },\n \"type\": \"observance\"\n },\n \"chinese 09-0-09\": {\n \"name\": {\n \"en\": \"Double Ninth Festival\",\n \"zh\": \"\u91CD\u967D\u7BC0\"\n },\n \"type\": \"observance\"\n },\n \"chinese 10-0-15\": {\n \"name\": {\n \"en\": \"Saisiat Festival\",\n \"zh\": \"\u8CFD\u590F\u7BC0\"\n },\n \"type\": \"observance\"\n }\n }\n },\n \"TZ\": {\n \"names\": {\n \"en\": \"Tanzania\"\n },\n \"dayoff\": \"sunday\",\n \"langs\": [\n \"en\"\n ],\n \"zones\": [\n \"Africa/Nairobi\"\n ],\n \"days\": {\n \"01-01\": {\n \"_name\": \"01-01\"\n },\n \"01-02\": {\n \"name\": {\n \"en\": \"Zanzibar Revolution Day\"\n }\n },\n \"easter -2\": {\n \"_name\": \"easter -2\"\n },\n \"easter\": {\n \"_name\": \"easter\",\n \"type\": \"observance\"\n },\n \"easter 1\": {\n \"_name\": \"easter 1\"\n },\n \"04-07\": {\n \"name\": {\n \"en\": \"Karume Day\"\n }\n },\n \"04-26\": {\n \"name\": {\n \"en\": \"Union Day\"\n }\n },\n \"05-01\": {\n \"_name\": \"05-01\"\n },\n \"07-07\": {\n \"name\": {\n \"en\": \"Saba Saba Day\"\n }\n },\n \"08-08\": {\n \"name\": {\n \"en\": \"Nane Nane Day\"\n }\n },\n \"10-14\": {\n \"name\": {\n \"en\": \"Nyerere Day\"\n }\n },\n \"12-09\": {\n \"_name\": \"Independence Day\"\n },\n \"12-25\": {\n \"_name\": \"12-25\"\n },\n \"12-26\": {\n \"_name\": \"12-25\"\n },\n \"1 Shawwal P2D\": {\n \"_name\": \"1 Shawwal\"\n },\n \"10 Dhu al-Hijjah\": {\n \"_name\": \"10 Dhu al-Hijjah\"\n },\n \"12 Rabi al-awwal\": {\n \"_name\": \"12 Rabi al-awwal\",\n \"name\": {\n \"en\": \"Maulid Day\"\n }\n }\n }\n },\n \"UA\": {\n \"names\": {\n \"uk\": \"\u0423\u043A\u0440\u0430\u0457\u043D\u0430\",\n \"en\": \"Ukraine\"\n },\n \"langs\": [\n \"uk\"\n ],\n \"zones\": [\n \"Europe/Kiev\",\n \"Europe/Uzhgorod\",\n \"Europe/Zaporozhye\"\n ],\n \"dayoff\": \"sunday\",\n \"days\": {\n \"01-01 and if saturday, sunday then next tuesday\": {\n \"_name\": \"01-01\",\n \"name\": {\n \"en\": \"New Year\"\n },\n \"substitute\": true\n },\n \"01-02 and if saturday, sunday then next monday\": {\n \"_name\": \"01-01\",\n \"name\": {\n \"en\": \"New Year\"\n },\n \"substitute\": true\n },\n \"julian 12-25 and if saturday, sunday then next monday\": {\n \"_name\": \"julian 12-25\",\n \"substitute\": true\n },\n \"03-08 and if saturday, sunday then next monday\": {\n \"_name\": \"03-08\"\n },\n \"orthodox and if sunday then next monday\": {\n \"_name\": \"orthodox\"\n },\n \"orthodox 49 and if sunday then next monday\": {\n \"_name\": \"easter 49\"\n },\n \"05-01 and if saturday, sunday then next tuesday\": {\n \"_name\": \"05-01\",\n \"substitute\": true\n },\n \"05-02 and if saturday, sunday then next monday\": {\n \"_name\": \"05-01\",\n \"substitute\": true\n },\n \"05-09 and if saturday, sunday then next monday\": {\n \"name\": {\n \"uk\": \"\u0414\u0435\u043D\u044C \u043F\u0435\u0440\u0435\u043C\u043E\u0433\u0438 \u043D\u0430\u0434 \u043D\u0430\u0446\u0438\u0437\u043C\u043E\u043C \u0443 \u0414\u0440\u0443\u0433\u0456\u0439 \u0441\u0432\u0456\u0442\u043E\u0432\u0456\u0439 \u0432\u0456\u0439\u043D\u0456\",\n \"en\": \"Victory Day\"\n },\n \"substitute\": true\n },\n \"06-28 and if saturday, sunday then next monday\": {\n \"_name\": \"Constitution Day\",\n \"substitute\": true\n },\n \"08-24 and if saturday, sunday then next monday\": {\n \"_name\": \"Independence Day\",\n \"substitute\": true\n },\n \"10-14 and if saturday, sunday then next monday\": {\n \"name\": {\n \"uk\": \"\u0414\u0435\u043D\u044C \u0437\u0430\u0445\u0438\u0441\u043D\u0438\u043A\u0430 \u0423\u043A\u0440\u0430\u0457\u043D\u0438\",\n \"en\": \"Defender of Ukraine Day\"\n },\n \"substitute\": true,\n \"active\": [\n {\n \"from\": \"2015-03-05\"\n }\n ]\n }\n }\n },\n \"UG\": {\n \"names\": {\n \"en\": \"Uganda\"\n },\n \"dayoff\": \"sundays\",\n \"langs\": [\n \"en\",\n \"sw\"\n ],\n \"zones\": [\n \"Africa/Nairobi\"\n ],\n \"days\": {\n \"01-01\": {\n \"_name\": \"01-01\"\n },\n \"01-26\": {\n \"name\": {\n \"en\": \"Liberation Day\"\n }\n },\n \"02-16\": {\n \"name\": {\n \"en\": \"Archbishop Janan Luwum Day\"\n }\n },\n \"03-08\": {\n \"_name\": \"03-08\"\n },\n \"easter -46\": {\n \"_name\": \"easter -46\",\n \"type\": \"observance\"\n },\n \"easter -2\": {\n \"_name\": \"easter -2\"\n },\n \"easter\": {\n \"_name\": \"easter\"\n },\n \"easter 1\": {\n \"_name\": \"easter 1\"\n },\n \"05-01\": {\n \"_name\": \"05-01\"\n },\n \"06-03\": {\n \"name\": {\n \"en\": \"Martyr's Day\"\n }\n },\n \"06-09\": {\n \"name\": {\n \"en\": \"National Heroes Day\"\n }\n },\n \"10-09\": {\n \"_name\": \"Independence Day\"\n },\n \"12-25\": {\n \"_name\": \"12-25\"\n },\n \"12-26\": {\n \"_name\": \"12-26\"\n },\n \"1 Shawwal\": {\n \"_name\": \"1 Shawwal\"\n },\n \"10 Dhu al-Hijjah\": {\n \"_name\": \"10 Dhu al-Hijjah\"\n }\n }\n },\n \"US\": {\n \"names\": {\n \"en\": \"United States of America\"\n },\n \"dayoff\": \"sunday\",\n \"zones\": [\n \"America/New_York\",\n \"America/Detroit\",\n \"America/Kentucky/Louisville\",\n \"America/Kentucky/Monticello\",\n \"America/Indiana/Indianapolis\",\n \"America/Indiana/Vincennes\",\n \"America/Indiana/Winamac\",\n \"America/Indiana/Marengo\",\n \"America/Indiana/Petersburg\",\n \"America/Indiana/Vevay\",\n \"America/Chicago\",\n \"America/Indiana/Tell_City\",\n \"America/Indiana/Knox\",\n \"America/Menominee\",\n \"America/North_Dakota/Center\",\n \"America/North_Dakota/New_Salem\",\n \"America/North_Dakota/Beulah\",\n \"America/Denver\",\n \"America/Boise\",\n \"America/Phoenix\",\n \"America/Los_Angeles\",\n \"America/Metlakatla\",\n \"America/Anchorage\",\n \"America/Juneau\",\n \"America/Sitka\",\n \"America/Yakutat\",\n \"America/Nome\",\n \"America/Adak\",\n \"Pacific/Honolulu\"\n ],\n \"langs\": [\n \"en-us\",\n \"en\"\n ],\n \"days\": {\n \"01-01 and if sunday then next monday if saturday then previous friday\": {\n \"substitute\": true,\n \"_name\": \"01-01\"\n },\n \"3rd monday in January\": {\n \"name\": {\n \"en\": \"Martin Luther King Jr. Day\",\n \"es\": \"Natalicio de Martin Luther King, Jr.\"\n }\n },\n \"3rd monday in February\": {\n \"name\": {\n \"en\": \"Washington's Birthday\",\n \"es\": \"D\u00EDa de los Presidentes\"\n }\n },\n \"02-14\": {\n \"_name\": \"02-14\",\n \"type\": \"observance\"\n },\n \"03-17\": {\n \"name\": {\n \"en\": \"St. Patrick's Day\"\n },\n \"type\": \"observance\"\n },\n \"easter\": {\n \"_name\": \"easter\",\n \"type\": \"observance\"\n },\n \"04-15 if friday then next monday if saturday,sunday then next tuesday\": {\n \"name\": {\n \"en\": \"Tax Day\"\n },\n \"type\": \"observance\"\n },\n \"wednesday before 04-28\": {\n \"name\": {\n \"en\": \"Administrative Professionals Day\"\n },\n \"type\": \"observance\"\n },\n \"2nd sunday in May\": {\n \"_name\": \"Mothers Day\",\n \"type\": \"observance\"\n },\n \"monday before 06-01\": {\n \"name\": {\n \"en\": \"Memorial Day\",\n \"es\": \"Recordaci\u00F3n de los Muertos de la Guerra\"\n }\n },\n \"06-19 and if sunday then next monday if saturday then previous friday since 2021\": {\n \"substitute\": true,\n \"name\": {\n \"en\": \"Juneteenth\"\n }\n },\n \"3rd sunday in June\": {\n \"_name\": \"Fathers Day\",\n \"type\": \"observance\"\n },\n \"07-04 and if sunday then next monday if saturday then previous friday\": {\n \"substitute\": true,\n \"_name\": \"Independence Day\"\n },\n \"1st monday in September\": {\n \"_name\": \"05-01\"\n },\n \"2nd monday in October\": {\n \"name\": {\n \"en\": \"Columbus Day\",\n \"es\": \"Descubrimiento de Am\u00E9rica\"\n }\n },\n \"10-31 18:00\": {\n \"name\": {\n \"en\": \"Halloween\"\n },\n \"type\": \"observance\"\n },\n \"11-11\": {\n \"name\": {\n \"en\": \"Veterans Day\",\n \"es\": \"D\u00EDa del Veterano\"\n }\n },\n \"substitutes 11-11 if sunday then next monday if saturday then previous friday\": {\n \"substitute\": true,\n \"name\": {\n \"en\": \"Veterans Day\",\n \"es\": \"D\u00EDa del Veterano\"\n },\n \"type\": \"bank\",\n \"note\": \"Federal Government offices are closed\"\n },\n \"tuesday after 1st monday in November every 4 years since 1848\": {\n \"name\": {\n \"en\": \"Election Day\"\n },\n \"type\": \"observance\"\n },\n \"4th thursday in November\": {\n \"name\": {\n \"en\": \"Thanksgiving Day\",\n \"es\": \"Acci\u00F3n de Gracias\"\n }\n },\n \"friday after 4th thursday in November\": {\n \"name\": {\n \"en\": \"Day after Thanksgiving Day\",\n \"es\": \"Dia despues Acci\u00F3n de Gracias\"\n },\n \"type\": \"observance\"\n },\n \"12-24\": {\n \"_name\": \"12-24\",\n \"type\": \"optional\"\n },\n \"12-25 and if sunday then next monday if saturday then previous friday\": {\n \"substitute\": true,\n \"_name\": \"12-25\"\n },\n \"12-31\": {\n \"_name\": \"12-31\",\n \"type\": \"observance\"\n }\n },\n \"states\": {\n \"AL\": {\n \"name\": \"Alabama\",\n \"zones\": [\n \"America/Chicago\"\n ],\n \"days\": {\n \"3rd monday in January\": {\n \"name\": {\n \"en\": \"Robert E. Lee/Martin Luther King Birthday\"\n }\n },\n \"3rd monday in February\": {\n \"name\": {\n \"en\": \"George Washington/Thomas Jefferson Birthday\"\n }\n },\n \"4th monday in April\": {\n \"name\": {\n \"en\": \"Confederate Memorial Day\"\n }\n },\n \"1st monday in June\": {\n \"name\": {\n \"en\": \"Jefferson Davis' birthday\"\n }\n }\n }\n },\n \"AK\": {\n \"name\": \"Alaska\",\n \"zones\": [\n \"America/Anchorage\",\n \"America/Metlakatla\",\n \"America/Juneau\",\n \"America/Sitka\",\n \"America/Yakutat\",\n \"America/Nome\"\n ],\n \"days\": {\n \"3rd monday in February\": {\n \"name\": {\n \"en\": \"President's Day\"\n }\n },\n \"monday before April\": {\n \"name\": {\n \"en\": \"Seward's Day\"\n }\n },\n \"2nd monday in October\": {\n \"name\": {\n \"en\": \"Columbus Day\"\n },\n \"active\": [\n {\n \"to\": \"2017-01-01\"\n }\n ]\n },\n \"2nd monday in October #1\": {\n \"name\": {\n \"en\": \"Indigenous Peoples' Day\"\n },\n \"active\": [\n {\n \"from\": \"2017-01-01\"\n }\n ]\n },\n \"10-18\": {\n \"name\": {\n \"en\": \"Alaska Day\"\n }\n }\n }\n },\n \"AZ\": {\n \"name\": \"Arizona\",\n \"zones\": [\n \"America/Phoenix\",\n \"America/Denver\"\n ],\n \"days\": {\n \"3rd monday in January\": {\n \"name\": {\n \"en\": \"Dr. Martin Luther King Jr./ Civil Rights Day\"\n }\n },\n \"3rd monday in February\": {\n \"name\": {\n \"en\": \"Lincoln/Washington Presidents' Day\"\n }\n }\n }\n },\n \"AR\": {\n \"name\": \"Arkansas\",\n \"zones\": [\n \"America/Chicago\"\n ],\n \"days\": {\n \"3rd monday in January\": {\n \"name\": {\n \"en\": \"Dr. Martin Luther King Jr./Robert E. Lee's Birthdays\"\n }\n },\n \"3rd monday in February\": {\n \"name\": {\n \"en\": \"George Washington's Birthday/Daisy Gatson Bates Day\"\n }\n },\n \"12-24\": {\n \"_name\": \"12-24\"\n }\n }\n },\n \"CA\": {\n \"name\": \"California\",\n \"zones\": [\n \"America/Los_Angeles\"\n ],\n \"days\": {\n \"3rd monday in February\": {\n \"name\": {\n \"en\": \"Presidents' Day\"\n }\n },\n \"2nd monday in October\": false,\n \"02-15\": {\n \"type\": \"observance\",\n \"name\": {\n \"en\": \"Susan B. Anthony Day\"\n }\n },\n \"03-31 and if sunday then next monday\": {\n \"substitute\": true,\n \"name\": {\n \"en\": \"C\u00E9sar Ch\u00E1vez Day\"\n }\n },\n \"05-19\": {\n \"type\": \"observance\",\n \"name\": {\n \"en\": \"Malcolm X Day\"\n }\n },\n \"05-23\": {\n \"type\": \"observance\",\n \"name\": {\n \"en\": \"Harvey Milk Day\"\n }\n },\n \"friday after 4th thursday in November\": {\n \"name\": {\n \"en\": \"Day after Thanksgiving Day\"\n },\n \"type\": \"public\"\n }\n },\n \"regions\": {\n \"LA\": {\n \"name\": \"Los Angeles\",\n \"days\": {\n \"08-24\": {\n \"name\": {\n \"en\": \"Kobe Bryant Day\"\n },\n \"type\": \"observance\",\n \"active\": [\n {\n \"from\": 2016\n }\n ]\n }\n }\n }\n }\n },\n \"CO\": {\n \"name\": \"Colorado\",\n \"zones\": [\n \"America/Denver\"\n ],\n \"days\": {\n \"3rd monday in February\": {\n \"name\": {\n \"en\": \"Washington-Lincoln Day\"\n }\n },\n \"2nd monday in October\": {\n \"type\": \"observance\"\n }\n }\n },\n \"CT\": {\n \"name\": \"Connecticut\",\n \"zones\": [\n \"America/New_York\"\n ],\n \"days\": {\n \"02-12\": {\n \"name\": {\n \"en\": \"Lincoln's Birthday\"\n }\n },\n \"easter -2\": {\n \"_name\": \"easter -2\"\n }\n }\n },\n \"DE\": {\n \"name\": \"Delaware\",\n \"days\": {\n \"2nd monday in October\": false,\n \"3rd monday in February\": false,\n \"easter -2\": {\n \"_name\": \"easter -2\"\n },\n \"friday after 4th thursday in November\": {\n \"name\": {\n \"en\": \"Day After Thanksgiving\"\n }\n },\n \"tuesday after 1st monday in November in even years\": {\n \"name\": {\n \"en\": \"Election Day\"\n }\n }\n }\n },\n \"DC\": {\n \"name\": \"District of Columbia\",\n \"days\": {\n \"04-16\": {\n \"name\": {\n \"en\": \"Emancipation Day\"\n }\n }\n }\n },\n \"FL\": {\n \"name\": \"Florida\",\n \"days\": {\n \"2nd monday in October\": false,\n \"3rd monday in February\": false,\n \"02-15\": {\n \"name\": {\n \"en\": \"Susan B. Anthony Day\"\n }\n },\n \"friday after 4th thursday in November\": {\n \"name\": {\n \"en\": \"Day After Thanksgiving\"\n }\n }\n }\n },\n \"GA\": {\n \"name\": \"Georgia\",\n \"days\": {\n \"3rd monday in February\": false,\n \"monday before 05-01 #1\": {\n \"name\": {\n \"en\": \"Confederate Memorial Day\"\n },\n \"active\": [\n {\n \"to\": \"2016-01-01\"\n }\n ]\n },\n \"monday before 05-01 #2\": {\n \"name\": {\n \"en\": \"State Holiday\"\n },\n \"note\": \"Known as Confederate Memorial Day prior to 2016\",\n \"active\": [\n {\n \"from\": \"2016-01-01\"\n }\n ]\n },\n \"friday after 4th thursday in November #1\": {\n \"name\": {\n \"en\": \"Robert E. Lee's Birthday\"\n },\n \"note\": \"General Lee was born on 1807-01-19 but this holiday was traditionally observed the day after Thanksgiving.\",\n \"active\": [\n {\n \"to\": \"2016-01-01\"\n }\n ]\n },\n \"friday after 4th thursday in November #2\": {\n \"name\": {\n \"en\": \"State Holiday\"\n },\n \"note\": \"Known as Robert E. Lee's Birtday prior to 2016\",\n \"active\": [\n {\n \"from\": \"2016-01-01\"\n }\n ]\n },\n \"12-24\": {\n \"name\": {\n \"en\": \"Washington's Birthday\"\n }\n },\n \"substitutes 12-24 if wednesday then next friday\": {\n \"substitute\": true,\n \"name\": {\n \"en\": \"Washington's Birthday\"\n }\n }\n }\n },\n \"HI\": {\n \"name\": \"Hawaii\",\n \"zones\": [\n \"Pacific/Honolulu\"\n ],\n \"days\": {\n \"3rd monday in February\": {\n \"name\": {\n \"en\": \"Presidents' Day\"\n }\n },\n \"03-26 and if saturday then previous friday if sunday then next monday\": {\n \"substitute\": true,\n \"name\": {\n \"en\": \"Prince Jonah Kuhio Kalanianaole Day\"\n }\n },\n \"easter -2\": {\n \"_name\": \"easter -2\"\n },\n \"06-11 and if saturday then previous friday if sunday then next monday\": {\n \"substitute\": true,\n \"name\": {\n \"en\": \"Kamehameha Day\"\n }\n },\n \"3rd friday in August\": {\n \"name\": {\n \"en\": \"Statehood Day\"\n }\n },\n \"2nd monday in October\": false,\n \"tuesday after 1st monday in November in even years\": {\n \"name\": {\n \"en\": \"General Election Day\"\n }\n }\n }\n },\n \"ID\": {\n \"name\": \"Idaho\",\n \"zones\": [\n \"America/Boise\",\n \"America/Los_Angeles\"\n ],\n \"days\": {\n \"3rd monday in January\": {\n \"name\": {\n \"en\": \"Martin Luther King, Jr./ Idaho Human Rights Day\"\n }\n },\n \"3rd monday in February\": {\n \"name\": {\n \"en\": \"President's Day\"\n }\n }\n }\n },\n \"IL\": {\n \"name\": \"Illinois\",\n \"zones\": [\n \"America/Chicago\"\n ],\n \"days\": {\n \"02-12\": {\n \"name\": {\n \"en\": \"Lincoln's Birthday\"\n }\n },\n \"1st monday in March\": {\n \"name\": {\n \"en\": \"Casimir Pulaski Day\"\n }\n },\n \"05-19\": {\n \"name\": {\n \"en\": \"Malcolm X Day\"\n }\n },\n \"tuesday after 1st monday in November in even years\": {\n \"name\": {\n \"en\": \"Election Day\"\n }\n }\n }\n },\n \"IN\": {\n \"name\": \"Indiana\",\n \"zones\": [\n \"America/Indiana/Indianapolis\",\n \"America/Indiana/Vincennes\",\n \"America/Indiana/Winamac\",\n \"America/Indiana/Marengo\",\n \"America/Indiana/Petersburg\",\n \"America/Indiana/Vevay\",\n \"America/Indiana/Tell_City\",\n \"America/Indiana/Knox\"\n ],\n \"days\": {\n \"easter -2\": {\n \"_name\": \"easter -2\"\n },\n \"tuesday after 1st monday in May\": {\n \"name\": {\n \"en\": \"Primary Election Day\"\n }\n },\n \"tuesday after 1st monday in November\": {\n \"name\": {\n \"en\": \"Election Day\"\n }\n },\n \"friday after 4th thursday in November\": {\n \"name\": {\n \"en\": \"Lincoln's Birthday\"\n }\n }\n }\n },\n \"IA\": {\n \"name\": \"Iowa\",\n \"zones\": [\n \"America/Chicago\"\n ],\n \"days\": {\n \"02-12\": {\n \"name\": {\n \"en\": \"Lincoln's Birthday\"\n }\n }\n }\n },\n \"KS\": {\n \"name\": \"Kansas\",\n \"zones\": [\n \"America/Chicago\",\n \"America/Denver\"\n ],\n \"days\": {\n \"3rd monday in February\": false\n }\n },\n \"KY\": {\n \"name\": \"Kentucky\",\n \"zones\": [\n \"America/Kentucky/Louisville\",\n \"America/Kentucky/Monticello\"\n ],\n \"days\": {\n \"3rd monday in February\": false,\n \"easter -2 14:00\": {\n \"_name\": \"easter -2\"\n },\n \"12-24\": {\n \"_name\": \"12-24\"\n },\n \"12-31\": {\n \"_name\": \"12-31\"\n }\n }\n },\n \"LA\": {\n \"name\": \"Louisiana\",\n \"zones\": [\n \"America/Chicago\"\n ],\n \"days\": {\n \"easter -2\": {\n \"_name\": \"easter -2\"\n },\n \"tuesday after 1st monday in November in even years\": {\n \"name\": {\n \"en\": \"Election Day\"\n }\n }\n },\n \"regions\": {\n \"NO\": {\n \"name\": \"New Orleans\",\n \"days\": {\n \"easter -47\": {\n \"_name\": \"easter -47\",\n \"name\": {\n \"en\": \"Mardi Gras\"\n }\n }\n }\n }\n }\n },\n \"ME\": {\n \"name\": \"Maine\",\n \"zones\": [\n \"America/New_York\"\n ],\n \"days\": {\n \"3rd monday in February\": {\n \"name\": {\n \"en\": \"Washington's Birthday/President's Day\"\n }\n },\n \"3rd monday in April\": {\n \"name\": {\n \"en\": \"Patriots' Day\"\n }\n }\n }\n },\n \"MD\": {\n \"name\": \"Maryland\",\n \"zones\": [\n \"America/New_York\"\n ],\n \"days\": {\n \"3rd monday in February\": {\n \"name\": {\n \"en\": \"President's Day\"\n }\n },\n \"friday before 1st monday before 06-01\": {\n \"name\": {\n \"en\": \"Service Reduction Day\"\n }\n },\n \"friday after 4th thursday in November\": {\n \"name\": {\n \"en\": \"Native American Heritage Day\"\n }\n }\n }\n },\n \"MA\": {\n \"name\": \"Massachusetts\",\n \"zones\": [\n \"America/New_York\"\n ],\n \"days\": {\n \"03-17\": {\n \"name\": {\n \"en\": \"Evacuation Day\"\n }\n },\n \"3rd monday in April\": {\n \"name\": {\n \"en\": \"Patriots' Day\"\n }\n },\n \"06-17\": {\n \"name\": {\n \"en\": \"Bunker Hill Day\"\n }\n }\n }\n },\n \"MI\": {\n \"name\": \"Michigan\",\n \"zones\": [\n \"America/Detroit\",\n \"America/Menominee\"\n ],\n \"days\": {\n \"12-24\": {\n \"_name\": \"12-24\"\n },\n \"12-31\": {\n \"_name\": \"12-31\"\n }\n }\n },\n \"MN\": {\n \"name\": \"Minnesota\",\n \"zones\": [\n \"America/Chicago\"\n ],\n \"days\": {\n \"3rd monday in February\": {\n \"name\": {\n \"en\": \"Washington's and Lincoln's Birthday\"\n }\n },\n \"2nd monday in October\": {\n \"name\": {\n \"en\": \"Columbus Day\"\n },\n \"active\": [\n {\n \"to\": \"2017-01-01\"\n }\n ]\n },\n \"2nd monday in October #1\": {\n \"name\": {\n \"en\": \"Indigenous Peoples\u2019 Day\"\n },\n \"active\": [\n {\n \"from\": \"2017-01-01\"\n }\n ]\n }\n }\n },\n \"MS\": {\n \"name\": \"Mississippi\",\n \"zones\": [\n \"America/Chicago\"\n ],\n \"days\": {\n \"3rd monday in January\": {\n \"name\": {\n \"en\": \"Martin Luther King's and Robert E. Lee's Birthdays\"\n }\n },\n \"monday before 05-01\": {\n \"name\": {\n \"en\": \"Confederate Memorial Day\"\n }\n }\n }\n },\n \"MO\": {\n \"name\": \"Missouri\",\n \"zones\": [\n \"America/Chicago\"\n ],\n \"days\": {\n \"02-12\": {\n \"name\": {\n \"en\": \"Lincoln's Birthday\"\n }\n },\n \"05-08\": {\n \"name\": {\n \"en\": \"Truman Day\"\n }\n }\n }\n },\n \"MT\": {\n \"name\": \"Montana\",\n \"zones\": [\n \"America/Denver\"\n ],\n \"days\": {\n \"3rd monday in February\": {\n \"name\": {\n \"en\": \"Lincoln's and Washington's Birthday\"\n }\n },\n \"tuesday after 1st monday in November\": {\n \"name\": {\n \"en\": \"Election Day\"\n }\n },\n \"12-24\": {\n \"_name\": \"12-24\"\n },\n \"12-31\": {\n \"_name\": \"12-31\"\n }\n }\n },\n \"NE\": {\n \"name\": \"Nebraska\",\n \"zones\": [\n \"America/Chicago\",\n \"America/Denver\"\n ],\n \"days\": {\n \"3rd monday in February\": {\n \"name\": {\n \"en\": \"President's Day\"\n }\n },\n \"friday before 05-01\": {\n \"name\": {\n \"en\": \"Arbor Day\"\n }\n }\n }\n },\n \"NV\": {\n \"name\": \"Nevada\",\n \"zones\": [\n \"America/Los_Angeles\"\n ],\n \"days\": {\n \"3rd monday in February\": {\n \"name\": {\n \"en\": \"Presidents Day\"\n }\n },\n \"2nd monday in October\": false,\n \"08-09\": {\n \"name\": {\n \"en\": \"Indigenous Peoples' Day\"\n },\n \"active\": [\n {\n \"from\": \"2017-01-01\"\n }\n ],\n \"type\": \"observance\"\n },\n \"friday before 11-01\": {\n \"name\": {\n \"en\": \"Nevada Day\"\n }\n },\n \"4th friday in November\": {\n \"name\": {\n \"en\": \"Family Day\"\n }\n }\n }\n },\n \"NH\": {\n \"name\": \"New Hampshire\",\n \"zones\": [\n \"America/New_York\"\n ],\n \"days\": {\n \"3rd monday in January\": {\n \"name\": {\n \"en\": \"Martin Luther King, Jr./ Civil Rights Day\"\n }\n },\n \"3rd monday in February\": {\n \"name\": {\n \"en\": \"President's Day\"\n }\n },\n \"2nd monday in October\": {\n \"type\": \"observance\"\n },\n \"tuesday after 1st monday in November in even years\": {\n \"name\": {\n \"en\": \"Election Day\"\n }\n },\n \"friday after 4th thursday in November\": {\n \"name\": {\n \"en\": \"Day after Thanksgiving\"\n }\n }\n }\n },\n \"NJ\": {\n \"name\": \"New Jersey\",\n \"zones\": [\n \"America/New_York\"\n ],\n \"days\": {\n \"02-12\": {\n \"name\": {\n \"en\": \"Lincoln's Birthday\"\n }\n },\n \"3rd monday in February\": {\n \"name\": {\n \"en\": \"Presidents Day\"\n }\n },\n \"easter -2\": {\n \"_name\": \"easter -2\"\n },\n \"tuesday after 1st monday in November\": {\n \"name\": {\n \"en\": \"Election Day\"\n }\n }\n }\n },\n \"NM\": {\n \"name\": \"New Mexico\",\n \"zones\": [\n \"America/Denver\"\n ],\n \"days\": {\n \"3rd monday in February\": {\n \"name\": {\n \"en\": \"Presidents' Day\"\n }\n },\n \"friday after 4th thursday in November\": {\n \"name\": {\n \"en\": \"Day after Thanksgiving\"\n }\n }\n }\n },\n \"NY\": {\n \"name\": \"New York\",\n \"zones\": [\n \"America/New_York\"\n ],\n \"days\": {\n \"02-12\": {\n \"name\": {\n \"en\": \"Lincoln's Birthday\"\n }\n },\n \"02-15\": {\n \"name\": {\n \"en\": \"Susan B. Anthony Day\"\n }\n },\n \"tuesday after 1st monday in November\": {\n \"name\": {\n \"en\": \"Election Day\"\n }\n }\n }\n },\n \"NC\": {\n \"name\": \"North Carolina\",\n \"zones\": [\n \"America/New_York\"\n ],\n \"days\": {\n \"3rd monday in February\": false,\n \"2nd monday in October\": false,\n \"easter -2\": {\n \"_name\": \"easter -2\"\n },\n \"friday after 4th thursday in November\": {\n \"name\": {\n \"en\": \"Day after Thanksgiving\"\n }\n },\n \"12-24 and if friday then previous thursday if saturday,sunday then previous friday\": {\n \"substitute\": true,\n \"_name\": \"12-24\"\n }\n }\n },\n \"ND\": {\n \"name\": \"North Dakota\",\n \"zones\": [\n \"America/North_Dakota/Center\",\n \"America/North_Dakota/New_Salem\",\n \"America/North_Dakota/Beulah\"\n ],\n \"days\": {\n \"3rd monday in February\": {\n \"name\": {\n \"en\": \"Presidents' Day\"\n }\n }\n }\n },\n \"OH\": {\n \"name\": \"Ohio\",\n \"zones\": [\n \"America/New_York\"\n ],\n \"days\": {\n \"3rd monday in February\": {\n \"name\": {\n \"en\": \"Washington-Lincoln Day\"\n }\n }\n }\n },\n \"OK\": {\n \"name\": \"Oklahoma\",\n \"zones\": [\n \"America/Chicago\"\n ],\n \"days\": {\n \"3rd monday in February\": {\n \"name\": {\n \"en\": \"Presidents' Day\"\n }\n },\n \"friday after 4th thursday in November\": {\n \"name\": {\n \"en\": \"Day after Thanksgiving\"\n }\n }\n }\n },\n \"OR\": {\n \"name\": \"Oregon\",\n \"zones\": [\n \"America/Los_Angeles\"\n ],\n \"days\": {\n \"3rd monday in February\": {\n \"name\": {\n \"en\": \"Presidents Day\"\n }\n }\n }\n },\n \"PA\": {\n \"name\": \"Pennsylvania\",\n \"zones\": [\n \"America/New_York\"\n ],\n \"days\": {\n \"3rd monday in February\": {\n \"name\": {\n \"en\": \"Presidents' Day\"\n }\n },\n \"06-14\": {\n \"name\": {\n \"en\": \"Flag Day\"\n }\n }\n }\n },\n \"RI\": {\n \"name\": \"Rhode Island\",\n \"zones\": [\n \"America/New_York\"\n ],\n \"days\": {\n \"2nd monday in August\": {\n \"name\": {\n \"en\": \"Victory Day\"\n }\n }\n }\n },\n \"SC\": {\n \"name\": \"South Carolina\",\n \"zones\": [\n \"America/New_York\"\n ],\n \"days\": {\n \"05-10\": {\n \"name\": {\n \"en\": \"Confederate Memorial Day\"\n }\n },\n \"12-26\": {\n \"_name\": \"12-26\"\n }\n }\n },\n \"SD\": {\n \"name\": \"South Dakota\",\n \"zones\": [\n \"America/Chicago\",\n \"America/Denver\"\n ],\n \"days\": {\n \"3rd monday in February\": {\n \"name\": {\n \"en\": \"Presidents' Day\"\n }\n },\n \"2nd monday in October\": {\n \"name\": {\n \"en\": \"Columbus Day\"\n },\n \"active\": [\n {\n \"to\": \"2015-01-01\"\n }\n ]\n },\n \"2nd monday in October #1\": {\n \"name\": {\n \"en\": \"Native American Day\"\n },\n \"active\": [\n {\n \"from\": \"2015-01-01\"\n }\n ]\n }\n }\n },\n \"TN\": {\n \"name\": \"Tennessee\",\n \"zones\": [\n \"America/Chicago\",\n \"America/New_York\"\n ],\n \"days\": {\n \"3rd monday in February\": {\n \"name\": {\n \"en\": \"President's Day\"\n }\n },\n \"easter -2\": {\n \"_name\": \"easter -2\"\n },\n \"12-24\": {\n \"_name\": \"12-24\"\n }\n }\n },\n \"TX\": {\n \"name\": \"Texas\",\n \"zones\": [\n \"America/Chicago\",\n \"America/Denver\"\n ],\n \"days\": {\n \"01-19\": {\n \"name\": {\n \"en\": \"Confederate Heroes Day\"\n },\n \"type\": \"observance\",\n \"note\": \"state agencies are partially staffed\"\n },\n \"3rd monday in February\": {\n \"name\": {\n \"en\": \"Presidents' Day\"\n }\n },\n \"03-02\": {\n \"name\": {\n \"en\": \"Texas Independence Day\"\n },\n \"type\": \"observance\",\n \"note\": \"state agencies are partially staffed\"\n },\n \"03-31\": {\n \"name\": {\n \"en\": \"Cesar Chavez Day\"\n },\n \"type\": \"observance\"\n },\n \"easter -2\": {\n \"_name\": \"easter -2\",\n \"type\": \"observance\"\n },\n \"04-21\": {\n \"name\": {\n \"en\": \"San Jacinto Day\"\n },\n \"type\": \"observance\",\n \"note\": \"state agencies are partially staffed\"\n },\n \"06-19\": {\n \"name\": {\n \"en\": \"Emancipation Day In Texas\"\n },\n \"type\": \"observance\",\n \"note\": \"state agencies are partially staffed\"\n },\n \"08-27\": {\n \"name\": {\n \"en\": \"Lyndon Baines Johnson Day\"\n },\n \"type\": \"observance\",\n \"note\": \"state agencies are partially staffed\"\n },\n \"friday after 4th thursday in November\": {\n \"name\": {\n \"en\": \"Day after Thanksgiving\"\n }\n },\n \"12-24\": {\n \"_name\": \"12-24\"\n },\n \"12-26\": {\n \"_name\": \"12-26\",\n \"name\": {\n \"en\": \"Day after Christmas\"\n }\n }\n }\n },\n \"UT\": {\n \"name\": \"Utah\",\n \"zones\": [\n \"America/Denver\"\n ],\n \"days\": {\n \"3rd monday in February\": {\n \"name\": {\n \"en\": \"Washington and Lincoln Day\"\n }\n },\n \"07-24\": {\n \"name\": {\n \"en\": \"Pioneer Day\"\n }\n }\n }\n },\n \"VT\": {\n \"name\": \"Vermont\",\n \"zones\": [\n \"America/New_York\"\n ],\n \"days\": {\n \"3rd monday in February\": {\n \"name\": {\n \"en\": \"Presidents' Day\"\n }\n },\n \"1st tuesday in March\": {\n \"name\": {\n \"en\": \"Town Meeting Day\"\n }\n },\n \"3rd monday in August\": {\n \"name\": {\n \"en\": \"Bennington Battle Day\"\n }\n },\n \"2nd monday in October\": {\n \"name\": {\n \"en\": \"Columbus Day\"\n },\n \"active\": [\n {\n \"to\": \"2017-09-01\"\n }\n ]\n },\n \"2nd monday in October #1\": {\n \"name\": {\n \"en\": \"Indigenous Peoples' Day\"\n },\n \"active\": [\n {\n \"from\": \"2017-09-01\"\n }\n ]\n }\n }\n },\n \"VA\": {\n \"name\": \"Virginia\",\n \"zones\": [\n \"America/New_York\"\n ],\n \"days\": {\n \"3rd monday in February\": {\n \"name\": {\n \"en\": \"George Washington Day\"\n }\n },\n \"friday before 3rd monday in January\": {\n \"name\": {\n \"en\": \"Lee\u2013Jackson Day\"\n }\n }\n }\n },\n \"WA\": {\n \"name\": \"Washington\",\n \"zones\": [\n \"America/Los_Angeles\"\n ],\n \"days\": {\n \"3rd monday in February\": {\n \"name\": {\n \"en\": \"Presidents' Day\"\n }\n }\n }\n },\n \"WV\": {\n \"name\": \"West Virginia\",\n \"zones\": [\n \"America/New_York\"\n ],\n \"days\": {\n \"02-15\": {\n \"name\": {\n \"en\": \"Susan B. Anthony Day\"\n }\n },\n \"3rd monday in February\": {\n \"name\": {\n \"en\": \"President's Day\"\n }\n },\n \"06-20\": {\n \"name\": {\n \"en\": \"West Virginia Day\"\n }\n },\n \"4th friday in November\": {\n \"name\": {\n \"en\": \"Lincoln's Day\"\n }\n }\n }\n },\n \"WI\": {\n \"name\": \"Wisconsin\",\n \"zones\": [\n \"America/Chicago\"\n ],\n \"days\": {\n \"02-15\": {\n \"name\": {\n \"en\": \"Susan B. Anthony Day\"\n }\n },\n \"2nd tuesday in September\": {\n \"name\": {\n \"en\": \"Primary Election Day\"\n }\n },\n \"tuesday after 1st monday in November\": {\n \"name\": {\n \"en\": \"Election Day\"\n }\n }\n }\n },\n \"WY\": {\n \"name\": \"Wyoming\",\n \"zones\": [\n \"America/Denver\"\n ],\n \"days\": {\n \"3rd monday in February\": {\n \"name\": {\n \"en\": \"President's Day\"\n }\n }\n }\n }\n }\n },\n \"UY\": {\n \"names\": {\n \"es\": \"Uruguay\",\n \"en\": \"Uruguay\"\n },\n \"dayoff\": \"sunday\",\n \"langs\": [\n \"es\"\n ],\n \"zones\": [\n \"America/Montevideo\"\n ],\n \"days\": {\n \"01-01\": {\n \"_name\": \"01-01\"\n },\n \"01-06\": {\n \"_name\": \"01-06\",\n \"type\": \"observance\"\n },\n \"easter -48\": {\n \"name\": {\n \"en\": \"Carnival\",\n \"es\": \"Carnaval\"\n },\n \"type\": \"observance\"\n },\n \"easter -47\": {\n \"_name\": \"easter -47\",\n \"type\": \"observance\"\n },\n \"easter -6 P5D\": {\n \"name\": {\n \"en\": \"Tourism Week\",\n \"es\": \"Semana de Turismo\"\n },\n \"type\": \"observance\"\n },\n \"easter -3\": {\n \"_name\": \"easter -3\"\n },\n \"easter -2\": {\n \"_name\": \"easter -2\"\n },\n \"easter\": {\n \"_name\": \"easter\",\n \"type\": \"observance\"\n },\n \"04-19 if tuesday,wednesday then previous monday if thursday,friday then next monday\": {\n \"name\": {\n \"en\": \"Landing of the 33 Orientals\",\n \"es\": \"Desembarco de los 33 Orientales\"\n },\n \"type\": \"observance\"\n },\n \"05-01\": {\n \"_name\": \"05-01\"\n },\n \"05-18 if tuesday,wednesday then previous monday if thursday,friday then next monday\": {\n \"name\": {\n \"en\": \"Battle of Las Piedras\",\n \"es\": \"Batalla de las Piedras\"\n },\n \"type\": \"observance\"\n },\n \"06-19\": {\n \"name\": {\n \"en\": \"Birthday of Jos\u00E9 Gervasio Artigas and Never Again Day\",\n \"es\": \"Natalicio de Artigas y D\u00EDa del Nunca M\u00E1s\"\n },\n \"type\": \"observance\"\n },\n \"07-18\": {\n \"_name\": \"Constitution Day\"\n },\n \"08-25\": {\n \"_name\": \"Independence Day\"\n },\n \"10-12 if tuesday,wednesday then previous monday if thursday,friday then next monday\": {\n \"name\": {\n \"en\": \"Columbus Day\",\n \"es\": \"D\u00EDa de la Raza\"\n },\n \"type\": \"observance\"\n },\n \"11-02\": {\n \"_name\": \"11-02\",\n \"type\": \"observance\"\n },\n \"12-24\": {\n \"_name\": \"12-24\",\n \"type\": \"observance\"\n },\n \"12-25\": {\n \"_name\": \"12-25\"\n },\n \"12-31\": {\n \"_name\": \"12-31\",\n \"type\": \"observance\"\n }\n }\n },\n \"VA\": {\n \"names\": {\n \"it\": \"Stato della Citt\u00E0 del Vaticano\",\n \"la\": \"Status Civitatis Vaticanae\",\n \"en\": \"Vatican City\"\n },\n \"langs\": [\n \"it\"\n ],\n \"zones\": [\n \"Europe/Rome\"\n ],\n \"dayoff\": \"sunday\",\n \"days\": {\n \"01-01\": {\n \"name\": {\n \"en\": \"Solemnity of Mary, Mother of God\",\n \"it\": \"Maria Santissima Madre di Dio\"\n }\n },\n \"01-06\": {\n \"name\": {\n \"en\": \"Epiphany\",\n \"it\": \"Epifania del Signore\"\n }\n },\n \"02-11\": {\n \"name\": {\n \"en\": \"Anniversary of the foundation of Vatican City\",\n \"it\": \"Anniversario della istituzione dello Stato della Citt\u00E0 del Vaticano\"\n }\n },\n \"03-19\": {\n \"_name\": \"03-19\"\n },\n \"easter 1\": {\n \"_name\": \"easter 1\"\n },\n \"easter 39\": {\n \"_name\": \"easter 39\",\n \"active\": [\n {\n \"to\": 2009\n }\n ]\n },\n \"easter 60\": {\n \"_name\": \"easter 60\",\n \"active\": [\n {\n \"to\": 2009\n }\n ]\n },\n \"05-01\": {\n \"_name\": \"05-01\",\n \"name\": {\n \"en\": \"Saint Joseph the Worker\",\n \"it\": \"San Giuseppe lavoratore\"\n }\n },\n \"06-29\": {\n \"_name\": \"06-29\"\n },\n \"08-15\": {\n \"_name\": \"08-15\",\n \"name\": {\n \"it\": \"Assunzione di Maria in Cielo\"\n }\n },\n \"09-08\": {\n \"name\": {\n \"en\": \"Nativity of Mary\",\n \"it\": \"Festa della nativit\u00E0 della madonna\"\n }\n },\n \"11-01\": {\n \"_name\": \"11-01\"\n },\n \"12-08\": {\n \"_name\": \"12-08\"\n },\n \"12-25\": {\n \"_name\": \"12-25\"\n },\n \"12-26\": {\n \"_name\": \"12-26\"\n },\n \"10-16\": {\n \"name\": {\n \"en\": \"Anniversary of the election of Pope John Paul II\",\n \"it\": \"Anniversario dell'Elezione del Santo Padre\"\n },\n \"active\": [\n {\n \"from\": 1978,\n \"to\": 2005\n }\n ]\n },\n \"11-04\": {\n \"name\": {\n \"en\": \"Saint Charles Borromeo - Name day of the Holy Father\",\n \"it\": \"San Carlo Borromeo - Onomastico del Santo Padre\"\n },\n \"note\": \"Name day of Pope John Paul II (Karol J\u00F3zef Wojty\u0142a)\",\n \"active\": [\n {\n \"from\": 1978,\n \"to\": 2005\n }\n ]\n },\n \"04-19\": {\n \"name\": {\n \"en\": \"Anniversary of the election of Pope Benedict XVI\",\n \"it\": \"Anniversario dell'Elezione del Santo Padre\"\n },\n \"active\": [\n {\n \"from\": 2005,\n \"to\": 2013\n }\n ]\n },\n \"03-19#1\": {\n \"name\": {\n \"en\": \"Saint Joseph - Name day of the Holy Father\",\n \"it\": \"San Giuseppe - Onomastico del Santo Padre\"\n },\n \"note\": \"Name day of Pope Benedict XVI (Josef Ratzinger)\",\n \"active\": [\n {\n \"from\": 2005,\n \"to\": 2013\n }\n ]\n },\n \"03-13\": {\n \"name\": {\n \"en\": \"Anniversary of the election of Pope Francis\",\n \"it\": \"Anniversario dell'Elezione del Santo Padre\"\n },\n \"active\": [\n {\n \"from\": 2013\n }\n ]\n },\n \"04-23\": {\n \"name\": {\n \"en\": \"Saint George - Name day of the Holy Father\",\n \"it\": \"San Giorgio - Onomastico del Santo Padre\"\n },\n \"note\": \"Name day of Pope Francis (Jorge Mario Bergoglio)\",\n \"active\": [\n {\n \"from\": 2013\n }\n ]\n }\n }\n },\n \"VC\": {\n \"names\": {\n \"en\": \"St. Vincent & Grenadines\"\n },\n \"langs\": [\n \"en\"\n ],\n \"zones\": [\n \"America/Port_of_Spain\"\n ],\n \"dayoff\": \"sunday\",\n \"days\": {\n \"01-01 and if Sunday then next Monday\": {\n \"substitute\": true,\n \"_name\": \"01-01\"\n },\n \"03-14 and if Sunday then next Monday\": {\n \"substitute\": true,\n \"name\": {\n \"en\": \"National Hero\u2032s Day\"\n }\n },\n \"easter -2\": {\n \"_name\": \"easter -2\"\n },\n \"easter\": {\n \"_name\": \"easter\",\n \"type\": \"observance\"\n },\n \"easter 1\": {\n \"_name\": \"easter 1\"\n },\n \"05-01 and if Sunday then next Monday\": {\n \"substitute\": true,\n \"_name\": \"05-01\"\n },\n \"easter 50\": {\n \"_name\": \"easter 50\"\n },\n \"1st Monday in July\": {\n \"name\": {\n \"en\": \"Carnival Monday\"\n },\n \"disable\": [\n \"2021-06-05\"\n ],\n \"enable\": [\n \"2021-09-06\"\n ]\n },\n \"Tuesday after 1st Monday in July\": {\n \"name\": {\n \"en\": \"Carnival Tuesday\"\n },\n \"disable\": [\n \"2021-06-06\"\n ],\n \"enable\": [\n \"2021-09-07\"\n ]\n },\n \"08-01 and if Sunday then next Monday\": {\n \"substitute\": true,\n \"name\": {\n \"en\": \"Emancipation Day\"\n }\n },\n \"10-27 and if Sunday then next Monday\": {\n \"substitute\": true,\n \"_name\": \"Independence Day\"\n },\n \"12-25 and if Sunday then next Tuesday\": {\n \"substitute\": true,\n \"_name\": \"12-25\"\n },\n \"12-26 and if Sunday then next Monday\": {\n \"substitute\": true,\n \"_name\": \"12-26\"\n }\n }\n },\n \"VE\": {\n \"names\": {\n \"es\": \"Venezuela\",\n \"en\": \"Venezuela\"\n },\n \"dayoff\": \"sundays\",\n \"langs\": [\n \"es\"\n ],\n \"zones\": [\n \"America/Caracas\"\n ],\n \"days\": {\n \"01-01\": {\n \"_name\": \"01-01\"\n },\n \"01-06\": {\n \"_name\": \"01-06\",\n \"type\": \"observance\"\n },\n \"01-15\": {\n \"name\": {\n \"es\": \"D\u00EDa del Maestro\",\n \"en\": \"Teacher's Day\"\n },\n \"type\": \"optional\",\n \"note\": \"teachers only\"\n },\n \"03-19\": {\n \"_name\": \"03-19\",\n \"type\": \"observance\"\n },\n \"easter -48\": {\n \"name\": {\n \"en\": \"Carnival\",\n \"es\": \"Carnaval\"\n }\n },\n \"easter -47\": {\n \"_name\": \"easter -47\"\n },\n \"easter -6 P7D\": {\n \"name\": {\n \"en\": \"Holy Week\",\n \"es\": \"Semana Santa\"\n },\n \"type\": \"observance\"\n },\n \"easter -3\": {\n \"_name\": \"easter -3\"\n },\n \"easter -2\": {\n \"_name\": \"easter -2\"\n },\n \"easter\": {\n \"_name\": \"easter\"\n },\n \"04-19\": {\n \"name\": {\n \"en\": \"Declaration of Independence\",\n \"es\": \"Declaraci\u00F3n de la Independencia\"\n }\n },\n \"05-01\": {\n \"_name\": \"05-01\"\n },\n \"06-24\": {\n \"name\": {\n \"en\": \"Battle of Carabobo\",\n \"es\": \"Aniversario de la Batalla de Carabobo\"\n }\n },\n \"07-05\": {\n \"_name\": \"Independence Day\"\n },\n \"07-24\": {\n \"name\": {\n \"en\": \"Birthday of Sim\u00F3n Bol\u00EDvar\",\n \"es\": \"Natalicio de Sim\u00F3n Bol\u00EDvar\"\n }\n },\n \"08-03\": {\n \"name\": {\n \"en\": \"Flag Day\",\n \"es\": \"D\u00EDa de la Bandera\"\n },\n \"type\": \"observance\"\n },\n \"09-11\": {\n \"name\": {\n \"en\": \"Our Lady of Coromoto\",\n \"es\": \"D\u00EDa de Nuestra Se\u00F1ora de Coromoto\"\n },\n \"type\": \"observance\"\n },\n \"10-12\": {\n \"name\": {\n \"en\": \"Day of Indigenous Resistance\",\n \"es\": \"D\u00EDa de la resistencia ind\u00EDgena\"\n }\n },\n \"11-01\": {\n \"_name\": \"11-01\",\n \"type\": \"observance\"\n },\n \"11-02\": {\n \"_name\": \"11-02\",\n \"type\": \"observance\"\n },\n \"12-08\": {\n \"_name\": \"12-08\",\n \"type\": \"observance\"\n },\n \"12-10\": {\n \"name\": {\n \"en\": \"Venezuelan Air Force Day\",\n \"es\": \"D\u00EDa de la Aviaci\u00F3n Nacional\"\n },\n \"type\": \"observance\"\n },\n \"12-24\": {\n \"_name\": \"12-24\"\n },\n \"12-25\": {\n \"_name\": \"12-25\"\n },\n \"12-31\": {\n \"_name\": \"12-31\"\n }\n },\n \"states\": {\n \"B\": {\n \"name\": \"Anzo\u00E1tegui\",\n \"days\": {\n \"11-14\": {\n \"name\": {\n \"es\": \"Natalicio de Jos\u00E9 Antonio Anzo\u00E1tegui\"\n }\n }\n }\n },\n \"G\": {\n \"name\": \"Carabobo\",\n \"days\": {\n \"11-13\": {\n \"name\": {\n \"es\": \"D\u00EDa de la Virgen del Socorro\"\n }\n }\n }\n },\n \"K\": {\n \"name\": \"Lara\",\n \"days\": {\n \"01-14\": {\n \"name\": {\n \"es\": \"D\u00EDa de La Divina Pastora\"\n }\n },\n \"05-28\": {\n \"name\": {\n \"es\": \"Natalicio de Jacinto Lara\"\n }\n }\n },\n \"regions\": {\n \"BA\": {\n \"name\": \"Barquisimeto\",\n \"days\": {\n \"09-14\": {\n \"name\": {\n \"es\": \"D\u00EDa de Barquisimeto\"\n }\n }\n }\n }\n }\n },\n \"M\": {\n \"name\": \"Miranda\",\n \"days\": {\n \"03-19\": {\n \"_name\": \"03-19\"\n }\n }\n },\n \"N\": {\n \"name\": \"Monagas\",\n \"days\": {\n \"12-07\": {\n \"name\": {\n \"es\": \"D\u00EDa de Maturin\"\n }\n }\n }\n },\n \"S\": {\n \"name\": \"T\u00E1chira\",\n \"days\": {\n \"08-15\": {\n \"_name\": \"08-15\",\n \"name\": {\n \"es\": \"D\u00EDa de la Virgen de Consolaci\u00F3n\"\n }\n }\n }\n },\n \"V\": {\n \"name\": \"Zulia\",\n \"days\": {\n \"10-24\": {\n \"name\": {\n \"es\": \"Natalicio de Rafael Urdaneta\"\n }\n },\n \"11-18\": {\n \"name\": {\n \"es\": \"D\u00EDa de la Virgen de la Chinita\"\n }\n }\n }\n }\n }\n },\n \"VG\": {\n \"names\": {\n \"en\": \"British Virgin Islands\"\n },\n \"langs\": [\n \"en\"\n ],\n \"zones\": [\n \"America/Port_of_Spain\"\n ],\n \"dayoff\": \"sunday\",\n \"days\": {\n \"01-01\": {\n \"_name\": \"01-01\"\n },\n \"Monday before 03-08\": {\n \"name\": {\n \"en\": \"The Anniversary of the Birth of Hamilton Lavity Stoutt\"\n }\n },\n \"2nd Monday in March\": {\n \"name\": {\n \"en\": \"Commonwealth Day\"\n }\n },\n \"easter -2\": {\n \"_name\": \"easter -2\"\n },\n \"easter\": {\n \"_name\": \"easter\",\n \"type\": \"observance\"\n },\n \"easter 1\": {\n \"_name\": \"easter 1\"\n },\n \"easter 49\": {\n \"_name\": \"easter 49\",\n \"type\": \"observance\"\n },\n \"easter 50\": {\n \"_name\": \"easter 50\"\n },\n \"2nd Saturday after 06-02 prior to 2020\": {\n \"name\": {\n \"en\": \"Sovereign\u2019s Birthday\"\n },\n \"disable\": [\n \"2017-06-10\",\n \"2019-06-15\"\n ],\n \"enable\": [\n \"2017-06-17\",\n \"2019-06-07\"\n ]\n },\n \"2nd Friday after 06-02 since 2020\": {\n \"name\": {\n \"en\": \"Sovereign\u2019s Birthday\"\n }\n },\n \"07-01 if Sunday,Thursday then next Monday if Saturday then previous Friday if Tuesday,Wednesday then previous Monday\": {\n \"name\": {\n \"en\": \"Virgin Islands Day\"\n }\n },\n \"10-21 if Sunday then next Monday if Saturday then previous Friday if Tuesday,Wednesday then previous Monday if Thursday then next Friday\": {\n \"name\": {\n \"en\": \"St. Ursula\u2019s Day\"\n },\n \"disable\": [\n \"2016-10-23\",\n \"2020-10-19\",\n \"2021-10-22\"\n ],\n \"enable\": [\n \"2016-10-19\",\n \"2020-10-23\"\n ]\n },\n \"1st Monday in August\": {\n \"name\": {\n \"en\": \"Emancipation Monday\"\n }\n },\n \"Tuesday after 1st Monday in August\": {\n \"name\": {\n \"en\": \"Emancipation Tuesday\"\n }\n },\n \"Wednesday after 1st Monday in August\": {\n \"name\": {\n \"en\": \"Emancipation Wednesday\"\n }\n },\n \"2021-10-18\": {\n \"name\": {\n \"en\": \"Heroes\u2019 and Forefathers Day\"\n }\n },\n \"2021-11-08\": {\n \"name\": {\n \"en\": \"Commemoration of the Great March of 1949\"\n }\n },\n \"12-25 and if Saturday then next Monday if Sunday then next Tuesday\": {\n \"substitute\": true,\n \"_name\": \"12-25\"\n },\n \"12-26 and if Saturday then next Monday if Sunday then next Tuesday\": {\n \"substitute\": true,\n \"_name\": \"12-26\"\n }\n }\n },\n \"VI\": {\n \"names\": {\n \"en\": \"U.S. Virgin Islands\"\n },\n \"langs\": [\n \"en\"\n ],\n \"zones\": [\n \"America/Port_of_Spain\"\n ],\n \"dayoff\": \"sunday\",\n \"_days\": \"US\",\n \"days\": {\n \"01-06\": {\n \"_name\": \"01-06\",\n \"name\": {\n \"en\": \"Three Kings Day\"\n }\n },\n \"3rd monday in February\": {\n \"name\": {\n \"en\": \"President's Day\"\n }\n },\n \"03-17\": false,\n \"03-31\": {\n \"name\": {\n \"en\": \"Transfer Day\"\n }\n },\n \"easter -3\": {\n \"_name\": \"easter -3\"\n },\n \"easter -2\": {\n \"_name\": \"easter -2\"\n },\n \"easter 1\": {\n \"_name\": \"easter 1\"\n },\n \"07-03\": {\n \"name\": {\n \"en\": \"Emancipation Day\"\n }\n },\n \"4th Monday in July\": {\n \"name\": {\n \"en\": \"Hurricane Supplication Day\"\n }\n },\n \"2nd monday in October\": {\n \"name\": {\n \"en\": \"Virgin Islands\u2013Puerto Rico Friendship Day\"\n }\n },\n \"10-25\": {\n \"name\": {\n \"en\": \"Hurricane Thanksgiving\"\n },\n \"type\": \"observance\"\n },\n \"friday after 4th thursday in November\": {\n \"name\": {\n \"en\": \"Day after Thanksgiving Day\"\n },\n \"type\": \"school\"\n }\n }\n },\n \"VN\": {\n \"names\": {\n \"vi\": \"C\u1ED9ng h\u00F2a X\u00E3 h\u1ED9i ch\u1EE7 ngh\u0129a Vi\u1EC7t Nam\",\n \"en\": \"Vietnam\"\n },\n \"dayoff\": \"\",\n \"langs\": [\n \"vi\"\n ],\n \"zones\": [\n \"Asia/Ho_Chi_Minh\",\n \"Asia/Bangkok\"\n ],\n \"days\": {\n \"01-01\": {\n \"_name\": \"01-01\"\n },\n \"vietnamese 1-0-1\": {\n \"name\": {\n \"en\": \"Vietnamese New Year\",\n \"vi\": \"T\u1EBFt Nguy\u00EAn \u0110\u00E1n\"\n }\n },\n \"1 day before vietnamese 1-0-1 P5D\": {\n \"name\": {\n \"en\": \"Vietnamese New Year Holidays\",\n \"vi\": \"Giao th\u1EEBa T\u1EBFt Nguy\u00EAn \u0110\u00E1n\"\n }\n },\n \"vietnamese 3-0-10\": {\n \"name\": {\n \"en\": \"Hung Kings Commemorations\",\n \"vi\": \"Gi\u1ED7 t\u1ED5 H\u00F9ng V\u01B0\u01A1ng\"\n }\n },\n \"04-30\": {\n \"name\": {\n \"en\": \"Day of liberating the South for national reunification\",\n \"vi\": \"Ng\u00E0y Gi\u1EA3i ph\u00F3ng mi\u1EC1n Nam\"\n }\n },\n \"05-01\": {\n \"_name\": \"05-01\"\n },\n \"09-02\": {\n \"name\": {\n \"en\": \"National Day\",\n \"vi\": \"Qu\u1ED1c kh\u00E1nh\"\n }\n },\n \"02-03\": {\n \"name\": {\n \"en\": \"Communist Party of Viet Nam Foundation Anniversary\",\n \"vi\": \"Ng\u00E0y th\u00E0nh l\u1EADp \u0110\u1EA3ng\"\n },\n \"type\": \"observance\"\n },\n \"03-08\": {\n \"_name\": \"03-08\",\n \"type\": \"observance\"\n },\n \"04-21\": {\n \"name\": {\n \"en\": \"Vietnam Book Day\",\n \"vi\": \"Ng\u00E0y S\u00E1ch Vi\u1EC7t Nam\"\n },\n \"type\": \"observance\"\n },\n \"05-07\": {\n \"name\": {\n \"en\": \"Dien Bien Phu Victory Day\",\n \"vi\": \"Ng\u00E0y Chi\u1EBFn th\u1EAFng \u0110i\u1EC7n Bi\u1EC7n Ph\u1EE7\"\n },\n \"type\": \"observance\"\n },\n \"05-19\": {\n \"name\": {\n \"en\": \"President Ho Chi Minh's Birthday\",\n \"vi\": \"Ng\u00E0y sinh Ch\u1EE7 t\u1ECBch H\u1ED3 Ch\u00ED Minh\"\n },\n \"type\": \"observance\"\n },\n \"06-01\": {\n \"name\": {\n \"en\": \"International Children's Day\",\n \"vi\": \"Ng\u00E0y qu\u1ED1c t\u1EBF Thi\u1EBFu nhi\"\n },\n \"type\": \"observance\"\n },\n \"06-28\": {\n \"name\": {\n \"en\": \"Vietnamese Family Day\",\n \"vi\": \"Ng\u00E0y Gia \u0111\u00ECnh Vi\u1EC7t Nam\"\n },\n \"type\": \"observance\"\n },\n \"07-27\": {\n \"name\": {\n \"en\": \"Remembrance Day\",\n \"vi\": \"Ng\u00E0y Th\u01B0\u01A1ng Binh Li\u1EC7t S\u0129\"\n },\n \"type\": \"observance\"\n },\n \"08-19\": {\n \"name\": {\n \"en\": \"August Revolution Commemoration Day\",\n \"vi\": \"Ng\u00E0y c\u00E1ch m\u1EA1ng Th\u00E1ng T\u00E1m\"\n },\n \"type\": \"observance\"\n },\n \"10-10\": {\n \"name\": {\n \"en\": \"Capital Liberation Day\",\n \"vi\": \"Ng\u00E0y gi\u1EA3i ph\u00F3ng Th\u1EE7 \u0110\u00F4\"\n },\n \"type\": \"observance\"\n },\n \"10-20\": {\n \"name\": {\n \"en\": \"Vietnamese Women's Day\",\n \"vi\": \"Ng\u00E0y Ph\u1EE5 n\u1EEF Vi\u1EC7t Nam\"\n },\n \"type\": \"observance\"\n },\n \"11-20\": {\n \"name\": {\n \"en\": \"Vietnamese Teacher's Day\",\n \"vi\": \"Ng\u00E0y Nh\u00E0 gi\u00E1o Vi\u1EC7t Nam\"\n },\n \"type\": \"observance\"\n },\n \"12-22\": {\n \"name\": {\n \"en\": \"National Defence Day\",\n \"vi\": \"Ng\u00E0y h\u1ED9i Qu\u1ED1c ph\u00F2ng To\u00E0n d\u00E2n\"\n },\n \"type\": \"observance\"\n },\n \"vietnamese 1-0-5\": {\n \"name\": {\n \"en\": \"Victory of Ng\u1ECDc H\u1ED3i-\u0110\u1ED1ng \u0110a\",\n \"vi\": \"Chi\u1EBFn th\u1EAFng Ng\u1ECDc H\u1ED3i - \u0110\u1ED1ng \u0110a\"\n },\n \"type\": \"observance\"\n },\n \"vietnamese 1-0-15\": {\n \"name\": {\n \"en\": \"Lantern Festival\",\n \"vi\": \"T\u1EBFt Nguy\u00EAn Ti\u00EAu\"\n },\n \"type\": \"observance\"\n },\n \"vietnamese 4-0-15\": {\n \"name\": {\n \"en\": \"Buddha's Birthday\",\n \"vi\": \"L\u1EC5 Ph\u1EADt \u0111\u1EA3n\"\n },\n \"type\": \"observance\"\n },\n \"vietnamese 5-0-5\": {\n \"name\": {\n \"en\": \"Mid-year Festival\",\n \"vi\": \"T\u1EBFt \u0110oan ng\u1ECD\"\n },\n \"type\": \"observance\"\n },\n \"vietnamese 7-0-15\": {\n \"name\": {\n \"en\": \"Ghost Festival\",\n \"vi\": \"R\u1EB1m Th\u00E1ng B\u1EA3y, Vu Lan\"\n },\n \"type\": \"observance\"\n },\n \"vietnamese 8-0-15\": {\n \"name\": {\n \"en\": \"Mid-Autumn Festival\",\n \"vi\": \"T\u1EBFt Trung thu\"\n },\n \"type\": \"observance\"\n },\n \"vietnamese 12-0-23\": {\n \"name\": {\n \"en\": \"Kitchen guardians\",\n \"vi\": \"\u00D4ng T\u00E1o ch\u1EA7u tr\u1EDDi\"\n },\n \"type\": \"observance\"\n }\n }\n },\n \"VU\": {\n \"names\": {\n \"en\": \"Vanuatu\",\n \"fr\": \"R\u00E9publique de Vanuatu\"\n },\n \"langs\": [\n \"fr\",\n \"en\",\n \"bi\"\n ],\n \"zones\": [\n \"Pacific/Efate\"\n ],\n \"dayoff\": \"sunday\",\n \"days\": {\n \"01-01\": {\n \"_name\": \"01-01\"\n },\n \"02-21\": {\n \"name\": \"M\u00E9moire du p\u00E8re de l'ind\u00E9pendance R\u00E9v. Dr. W.H. Lini\"\n },\n \"02-22\": {\n \"_name\": \"Public Holiday\"\n },\n \"03-05\": {\n \"name\": \"F\u00EAte des chefs coutumiers\"\n },\n \"easter -2\": {\n \"_name\": \"easter -2\"\n },\n \"easter 1\": {\n \"_name\": \"easter 1\"\n },\n \"05-01\": {\n \"_name\": \"05-01\"\n },\n \"easter 39\": {\n \"_name\": \"easter 39\"\n },\n \"07-24\": {\n \"name\": \"Journ\u00E9e Mondiale des Enfants\"\n },\n \"07-30\": {\n \"_name\": \"Independence Day\"\n },\n \"08-15\": {\n \"_name\": \"08-15\"\n },\n \"08-16\": {\n \"_name\": \"Public Holiday\"\n },\n \"10-05\": {\n \"_name\": \"Constitution Day\"\n },\n \"10-29\": {\n \"name\": \"Jour de l'Unit\u00E9\"\n },\n \"12-25\": {\n \"_name\": \"12-25\"\n },\n \"12-26\": {\n \"name\": \"F\u00EAte de Famille\"\n },\n \"12-27\": {\n \"_name\": \"Public Holiday\"\n }\n }\n },\n \"XK\": {\n \"names\": {\n \"sq\": \"Republika e Kosov\u00EBs\",\n \"sr\": \"\u0420\u0435\u043F\u0443\u0431\u043B\u0438\u043A\u0430 \u041A\u043E\u0441\u043E\u0432\u043E\",\n \"en\": \"Kosovo\"\n },\n \"langs\": [\n \"sq\",\n \"sr\"\n ],\n \"zones\": [\n \"Europe/Belgrade\"\n ],\n \"dayoff\": \"sunday\",\n \"days\": {\n \"01-01\": {\n \"_name\": \"01-01\"\n },\n \"julian 12-25\": {\n \"_name\": \"julian 12-25\"\n },\n \"02-17\": {\n \"_name\": \"Independence Day\"\n },\n \"04-09\": {\n \"_name\": \"Constitution Day\"\n },\n \"easter\": {\n \"_name\": \"easter\"\n },\n \"orthodox\": {\n \"_name\": \"orthodox\"\n },\n \"05-01\": {\n \"_name\": \"05-01\"\n },\n \"05-09\": {\n \"_name\": \"05-09\"\n },\n \"12-25\": {\n \"_name\": \"12-25\"\n },\n \"1 Shawwal\": {\n \"_name\": \"1 Shawwal\"\n },\n \"10 Dhu al-Hijjah\": {\n \"_name\": \"10 Dhu al-Hijjah\"\n }\n }\n },\n \"YT\": {\n \"names\": {\n \"fr\": \"Mayotte\",\n \"en\": \"Mayotte\"\n },\n \"langs\": [\n \"fr\"\n ],\n \"zones\": [\n \"Africa/Nairobi\"\n ],\n \"dayoff\": \"sunday\",\n \"_days\": \"FR\",\n \"days\": {\n \"04-27\": {\n \"_name\": \"Abolition of Slavery\"\n }\n }\n },\n \"ZA\": {\n \"names\": {\n \"en\": \"South Africa\"\n },\n \"dayoff\": \"sunday\",\n \"langs\": [\n \"en\"\n ],\n \"zones\": [\n \"Africa/Johannesburg\"\n ],\n \"days\": {\n \"01-01\": {\n \"_name\": \"01-01\"\n },\n \"substitutes 01-01 if sunday then next monday\": {\n \"name\": {\n \"en\": \"Public Holiday\"\n }\n },\n \"03-21\": {\n \"name\": {\n \"en\": \"Human Rights Day\"\n }\n },\n \"substitutes 03-21 if sunday then next monday\": {\n \"name\": {\n \"en\": \"Public Holiday\"\n }\n },\n \"easter -2\": {\n \"_name\": \"easter -2\"\n },\n \"easter\": {\n \"_name\": \"easter\",\n \"type\": \"observance\"\n },\n \"easter 1\": {\n \"_name\": \"easter 1\",\n \"name\": {\n \"en\": \"Family Day\"\n }\n },\n \"04-27\": {\n \"name\": {\n \"en\": \"Freedom Day\"\n }\n },\n \"substitutes 04-27 if sunday then next monday\": {\n \"name\": {\n \"en\": \"Public Holiday\"\n }\n },\n \"05-01\": {\n \"_name\": \"05-01\",\n \"name\": {\n \"en\": \"Workers' Day\"\n }\n },\n \"substitutes 05-01 if sunday then next monday\": {\n \"name\": {\n \"en\": \"Public Holiday\"\n }\n },\n \"2nd sunday in May\": {\n \"_name\": \"Mothers Day\",\n \"type\": \"observance\"\n },\n \"06-16\": {\n \"name\": {\n \"en\": \"Youth Day\"\n }\n },\n \"substitutes 06-16 if sunday then next monday\": {\n \"name\": {\n \"en\": \"Public Holiday\"\n }\n },\n \"3rd sunday in June\": {\n \"_name\": \"Fathers Day\",\n \"type\": \"observance\"\n },\n \"08-09\": {\n \"name\": {\n \"en\": \"National Women's Day\"\n }\n },\n \"substitutes 08-09 if sunday then next monday\": {\n \"name\": {\n \"en\": \"Public Holiday\"\n }\n },\n \"07-18\": {\n \"name\": {\n \"en\": \"Nelson Mandela Day\"\n },\n \"type\": \"observance\"\n },\n \"09-24\": {\n \"name\": {\n \"en\": \"Heritage Day\"\n }\n },\n \"substitutes 09-24 if sunday then next monday\": {\n \"name\": {\n \"en\": \"Public Holiday\"\n }\n },\n \"12-16\": {\n \"name\": {\n \"en\": \"Day of Reconciliation\"\n }\n },\n \"substitutes 12-16 if sunday then next monday\": {\n \"name\": {\n \"en\": \"Public Holiday\"\n }\n },\n \"12-25\": {\n \"_name\": \"12-25\"\n },\n \"12-26\": {\n \"_name\": \"12-26\",\n \"name\": {\n \"en\": \"Day of Goodwill\"\n }\n },\n \"substitutes 12-26 if sunday then next monday\": {\n \"name\": {\n \"en\": \"Public Holiday\"\n }\n }\n }\n },\n \"ZM\": {\n \"names\": {\n \"en\": \"Zambia\"\n },\n \"dayoff\": \"sunday\",\n \"langs\": [\n \"en\"\n ],\n \"zones\": [\n \"Africa/Maputo\"\n ],\n \"days\": {\n \"01-01 and if sunday then next monday\": {\n \"substitute\": true,\n \"_name\": \"01-01\"\n },\n \"03-09\": {\n \"name\": {\n \"en\": \"Women\u2019s Day\"\n }\n },\n \"03-12 and if sunday then next monday\": {\n \"substitute\": true,\n \"name\": {\n \"en\": \"Youth Day\"\n }\n },\n \"easter -2\": {\n \"_name\": \"easter -2\"\n },\n \"easter 1\": {\n \"_name\": \"easter 1\"\n },\n \"05-01 and if sunday then next monday\": {\n \"substitute\": true,\n \"_name\": \"05-01\"\n },\n \"05-25 and if sunday then next monday\": {\n \"substitute\": true,\n \"name\": {\n \"en\": \"African Freedom Day\"\n }\n },\n \"1st monday in July\": {\n \"name\": {\n \"en\": \"Heroes' Day\"\n }\n },\n \"tuesday after 1st monday in July\": {\n \"name\": {\n \"en\": \"Unity Day\"\n }\n },\n \"1st monday in August\": {\n \"name\": {\n \"en\": \"Farmers' Day\"\n }\n },\n \"2015-10-18\": {\n \"name\": {\n \"en\": \"National day of Prayers\"\n }\n },\n \"10-24 and if sunday then next monday\": {\n \"substitute\": true,\n \"_name\": \"Independence Day\"\n },\n \"12-25 and if sunday then next monday\": {\n \"substitute\": true,\n \"_name\": \"12-25\"\n }\n }\n },\n \"ZW\": {\n \"names\": {\n \"sn\": \"Nyika yeZimbabwe\",\n \"nd\": \"iRiphabhuliki yeZimbabwe\",\n \"xh\": \"iRiphubliki eyeZimbabwe\",\n \"kck\": \"Nyika yeZimbabwe\",\n \"en\": \"Zimbabwe\"\n },\n \"dayoff\": \"sunday\",\n \"langs\": [\n \"en\"\n ],\n \"zones\": [\n \"Africa/Maputo\"\n ],\n \"days\": {\n \"01-01\": {\n \"_name\": \"01-01\"\n },\n \"easter -2\": {\n \"_name\": \"easter -2\"\n },\n \"easter\": {\n \"_name\": \"easter\",\n \"type\": \"observance\"\n },\n \"easter 1\": {\n \"_name\": \"easter 1\"\n },\n \"04-18\": {\n \"_name\": \"Independence Day\"\n },\n \"05-01\": {\n \"_name\": \"05-01\"\n },\n \"05-25\": {\n \"name\": {\n \"en\": \"Africa Day\"\n }\n },\n \"2nd sunday in May\": {\n \"_name\": \"Mothers Day\",\n \"type\": \"observance\"\n },\n \"3rd sunday in June\": {\n \"_name\": \"Fathers Day\",\n \"type\": \"observance\"\n },\n \"2nd monday in August\": {\n \"name\": {\n \"en\": \"Heroes' Day\"\n }\n },\n \"2nd tuesday in August\": {\n \"name\": {\n \"en\": \"Defence Forces Day\"\n }\n },\n \"12-22\": {\n \"name\": {\n \"en\": \"Unity Day\"\n }\n },\n \"12-25\": {\n \"_name\": \"12-25\"\n },\n \"12-26\": {\n \"_name\": \"12-26\"\n }\n }\n }\n },\n \"names\": {\n \"01-01\": {\n \"name\": {\n \"en\": \"New Year's Day\",\n \"am\": \"\u12A5\u1295\u1241\u1323\u1323\u123D\",\n \"ar\": \"\u0639\u064A\u062F \u0631\u0623\u0633 \u0627\u0644\u0633\u0646\u0629\",\n \"az\": \"Yeni il\",\n \"be\": \"\u041D\u043E\u0432\u044B \u0433\u043E\u0434\",\n \"bg\": \"\u041D\u043E\u0432\u0430 \u0413\u043E\u0434\u0438\u043D\u0430\",\n \"bs\": \"Novogodisnji dan\",\n \"ca\": \"Any nou\",\n \"cz\": \"Nov\u00FD rok\",\n \"da\": \"Nyt\u00E5r\",\n \"de\": \"Neujahr\",\n \"el\": \"\u03A0\u03C1\u03C9\u03C4\u03BF\u03C7\u03C1\u03BF\u03BD\u03B9\u03AC\",\n \"es\": \"A\u00F1o Nuevo\",\n \"et\": \"uusaasta\",\n \"fi\": \"Uudenvuodenp\u00E4iv\u00E4\",\n \"fil\": \"Araw ng Bagong Taon\",\n \"fo\": \"N\u00FDggj\u00E1rsdagur\",\n \"fr\": \"Nouvel An\",\n \"ge\": \"\u10D0\u10EE\u10D0\u10DA\u10D8 \u10EC\u10D4\u10DA\u10D8\",\n \"hr\": \"Nova godina\",\n \"hu\": \"\u00DAj\u00E9v\",\n \"hy\": \"\u0531\u0574\u0561\u0576\u0578\u0580\",\n \"id\": \"Hari tahun baru\",\n \"it\": \"Capodanno\",\n \"is\": \"N\u00FD\u00E1rsdagur\",\n \"jp\": \"\u5143\u65E5\",\n \"kl\": \"ukiortaaq\",\n \"ko\": \"\uC2E0\uC815\",\n \"lt\": \"Naujieji metai\",\n \"lv\": \"Jaunais Gads\",\n \"mg\": \"Taom-baovao\",\n \"mk\": \"\u041D\u043E\u0432\u0430 \u0413\u043E\u0434\u0438\u043D\u0430\",\n \"ms\": \"Hari Tahun Baru\",\n \"mt\": \"L-Ewwel tas-Sena\",\n \"nl\": \"Nieuwjaar\",\n \"no\": \"F\u00F8rste nytt\u00E5rsdag\",\n \"pap\": \"A\u00F1a Nobo\",\n \"pl\": \"Nowy Rok\",\n \"pt\": \"Ano Novo\",\n \"ro\": \"Anul nou\",\n \"ru\": \"\u041D\u043E\u0432\u044B\u0439 \u0433\u043E\u0434\",\n \"sl\": \"Novo leto\",\n \"sq\": \"Viti i Ri\",\n \"sr\": \"\u041D\u043E\u0432\u0430 \u0433\u043E\u0434\u0438\u043D\u0430\",\n \"sv\": \"Ny\u00E5rsdagen\",\n \"sw\": \"Mwaka mpya\",\n \"ti\": \"\u1213\u12F2\u123D \u12D3\u1218\u1275\",\n \"tr\": \"Y\u0131lba\u015F\u0131\",\n \"uk\": \"\u041D\u043E\u0432\u0438\u0439 \u0420\u0456\u043A\",\n \"vi\": \"T\u1EBFt D\u01B0\u01A1ng l\u1ECBch\",\n \"zh\": \"\u5143\u65E6\"\n }\n },\n \"01-06\": {\n \"name\": {\n \"en\": \"Epiphany\",\n \"am\": \"\u1265\u122D\u1210\u1290 \u1325\u121D\u1240\u1275\",\n \"da\": \"\u00C5benbaring\",\n \"de\": \"Heilige Drei K\u00F6nige\",\n \"de-ch\": \"Dreik\u00F6nigstag\",\n \"es\": \"D\u00EDa de los Reyes Magos\",\n \"et\": \"kolmekuningap\u00E4ev\",\n \"fi\": \"Loppiainen\",\n \"fr\": \"l'\u00C9piphanie\",\n \"el\": \"\u0398\u03B5\u03BF\u03C6\u03AC\u03BD\u03B5\u03B9\u03B1\",\n \"hr\": \"Bogojavljenje, Sveta tri kralja\",\n \"hu\": \"V\u00EDzkereszt\",\n \"it\": \"Befana\",\n \"is\": \"\u00DErett\u00E1ndinn\",\n \"nl\": \"Driekoningen\",\n \"mk\": \"\u0411\u043E\u0433\u043E\u0458\u0430\u0432\u043B\u0435\u043D\u0438\u0435\",\n \"pl\": \"\u015Awi\u0119to Trzech Kr\u00F3li\",\n \"sk\": \"Zjavenie P\u00E1na\",\n \"sv\": \"Trettondedag jul\",\n \"ti\": \"\u1325\u121D\u1240\u1275\",\n \"vi\": \"L\u1EC5 Hi\u1EC3n Linh\"\n }\n },\n \"02-02\": {\n \"name\": {\n \"en\": \"Candlemas\",\n \"de\": \"Lichtmess\",\n \"hu\": \"Gyertyaszentel\u0151 Boldogasszony\",\n \"nl\": \"Lichtmis\",\n \"vi\": \"L\u1EC5 \u0110\u1EE9c M\u1EB9 d\u00E2ng Ch\u00FAa Gi\u00EAsu trong \u0111\u1EC1n th\u00E1nh\"\n }\n },\n \"02-14\": {\n \"name\": {\n \"en\": \"Valentine's Day\",\n \"de\": \"Valentinstag\",\n \"fr\": \"Saint-Valentin\",\n \"hu\": \"Valentin nap\",\n \"nl\": \"Valentijnsdag\",\n \"vi\": \"L\u1EC5 t\u00ECnh nh\u00E2n\"\n }\n },\n \"03-08\": {\n \"name\": {\n \"en\": \"International Women's Day\",\n \"az\": \"Qad\u0131nlar g\u00FCn\u00FC\",\n \"be\": \"\u041Ci\u0436\u043D\u0430\u0440\u043E\u0434\u043D\u044B \u0436\u0430\u043D\u043E\u0447\u044B \u0434\u0437\u0435\u043D\u044C\",\n \"bg\": \"\u0414\u0435\u043D \u043D\u0430 \u0436\u0435\u043D\u0430\u0442\u0430\",\n \"de\": \"Internationaler Frauentag\",\n \"fr\": \"Journ\u00E9e internationale des femmes\",\n \"ge\": \"\u10E5\u10D0\u10DA\u10D7\u10D0 \u10E1\u10D0\u10D4\u10E0\u10D7\u10D0\u10E8\u10DD\u10E0\u10D8\u10E1\u10DD \u10D3\u10E6\u10D4\",\n \"hu\": \"Nemzetk\u00F6zi n\u0151nap\",\n \"hy\": \"\u053F\u0561\u0576\u0561\u0576\u0581 \u057F\u0578\u0576\",\n \"nl\": \"Internationale Vrouwendag\",\n \"pt\": \"Dia Internacional da Mulher\",\n \"ro\": \"Ziua Internationala a Femeii\",\n \"ru\": \"\u041C\u0435\u0436\u0434\u0443\u043D\u0430\u0440\u043E\u0434\u043D\u044B\u0439 \u0436\u0435\u043D\u0441\u043A\u0438\u0439 \u0434\u0435\u043D\u044C\",\n \"sl\": \"Mednarodni dan \u017Eena\",\n \"uk\": \"\u041C\u0456\u0436\u043D\u0430\u0440\u043E\u0434\u043D\u0438\u0439 \u0436\u0456\u043D\u043E\u0447\u0438\u0439 \u0434\u0435\u043D\u044C\",\n \"vi\": \"Qu\u1ED1c t\u1EBF Ph\u1EE5 n\u1EEF\",\n \"zh\": \"\u56FD\u9645\u5987\u5973\u8282\",\n \"ti\": \"\u1218\u12D3\u120D\u1272 \u12A3\u1290\u1235\u1272\"\n }\n },\n \"03-19\": {\n \"name\": {\n \"en\": \"Saint Joseph\",\n \"de-at\": \"Josefitag\",\n \"de\": \"Josefstag\",\n \"es\": \"San Jos\u00E9\",\n \"it\": \"San Giuseppe\",\n \"mt\": \"San \u0120u\u017Cepp\",\n \"nl\": \"Hoogfeest van de Heilige Jozef\",\n \"vi\": \"K\u00EDnh Th\u00E1nh Giuse\"\n }\n },\n \"04-01\": {\n \"name\": {\n \"en\": \"April Fools' Day\",\n \"hu\": \"Bolondok napja\",\n \"nl\": \"1 April\",\n \"sq\": \"Dita e G\u00EBnjeshtrave\",\n \"vi\": \"C\u00E1 th\u00E1ng t\u01B0\"\n }\n },\n \"05-01\": {\n \"name\": {\n \"en\": \"Labour Day\",\n \"en-us\": \"Labor Day\",\n \"ar\": \"\u064A\u0648\u0645 \u0627\u0644\u0639\u0645\u0627\u0644\",\n \"be\": \"\u0414\u0437\u0435\u043D\u044C \u043F\u0440\u0430\u0446\u044B\",\n \"bg\": \"\u0414\u0435\u043D \u043D\u0430 \u0442\u0440\u0443\u0434\u0430\",\n \"bs\": \"Radni dan\",\n \"cz\": \"Sv\u00E1tek pr\u00E1ce\",\n \"da\": \"1. maj\",\n \"de\": \"Tag der Arbeit\",\n \"el\": \"\u0395\u03C1\u03B3\u03B1\u03C4\u03B9\u03BA\u03AE \u03A0\u03C1\u03C9\u03C4\u03BF\u03BC\u03B1\u03B3\u03B9\u03AC\",\n \"es\": \"D\u00EDa del trabajador\",\n \"et\": \"kevadp\u00FCha\",\n \"fi\": \"Vappu\",\n \"fil\": \"Araw ng mga Manggagawa\",\n \"fr\": \"F\u00EAte du travail\",\n \"hr\": \"Praznik rada\",\n \"hu\": \"A munka \u00FCnnepe\",\n \"hy\": \"\u0531\u0577\u056D\u0561\u057F\u0561\u0576\u0584\u056B \u0585\u0580\",\n \"id\": \"Hari Buruh Internasional\",\n \"it\": \"Festa del Lavoro\",\n \"is\": \"H\u00E1t\u00ED\u00F0isdagur Verkamanna\",\n \"lt\": \"Tarptautin\u0117 darbo diena\",\n \"lv\": \"Darba sv\u0113tki\",\n \"nl\": \"Dag van de Arbeid\",\n \"no\": \"Arbeidernes dag\",\n \"mg\": \"Fetin'ny asa\",\n \"mk\": \"\u0414\u0435\u043D \u043D\u0430 \u0442\u0440\u0443\u0434\u043E\u0442\",\n \"ms\": \"Hari Pekerja\",\n \"mt\": \"Jum il-\u0126addiem\",\n \"pap\": \"Dia di Obrero\",\n \"pl\": \"\u015Awi\u0119to Pracy\",\n \"pt\": \"Dia do trabalhador\",\n \"ro\": \"Ziua muncii\",\n \"sk\": \"Sviatok pr\u00E1ce\",\n \"sl\": \"Praznik dela\",\n \"sq\": \"Dita Nd\u00EBrkomb\u00EBtare e Punonj\u00EBsve\",\n \"sr\": \"\u041F\u0440\u0430\u0437\u043D\u0438\u043A \u0440\u0430\u0434\u0430\",\n \"sv\": \"F\u00F6rsta Maj\",\n \"ti\": \"\u12E8\u120B\u1265 \u12A0\u12F0\u122E\u127D \u1240\u1295\",\n \"uk\": \"\u0414\u0435\u043D\u044C \u043C\u0456\u0436\u043D\u0430\u0440\u043E\u0434\u043D\u043E\u0457 \u0441\u043E\u043B\u0456\u0434\u0430\u0440\u043D\u043E\u0441\u0442\u0456 \u0442\u0440\u0443\u0434\u044F\u0449\u0438\u0445\",\n \"vi\": \"Qu\u1ED1c t\u1EBF Lao \u0111\u1ED9ng\",\n \"zh\": \"\u52B3\u52A8\u8282\"\n }\n },\n \"05-09\": {\n \"name\": {\n \"en\": \"Europe Day\",\n \"bg\": \"\u0414\u0435\u043D\u044F\u0442 \u043D\u0430 \u0415\u0432\u0440\u043E\u043F\u0430\",\n \"cs\": \"Den Evropy\",\n \"da\": \"Europadagen\",\n \"de\": \"Europatag\",\n \"el\": \"\u0397\u03BC\u03AD\u03C1\u03B1 \u03C4\u03B7\u03C2 \u0395\u03C5\u03C1\u03CE\u03C0\u03B7\u03C2\",\n \"es\": \"D\u00EDa de Europa\",\n \"et\": \"Euroopa p\u00E4ev\",\n \"fi\": \"Eurooppa-p\u00E4iv\u00E4\",\n \"fr\": \"Journ\u00E9e de l'Europe\",\n \"ga\": \"L\u00E1 na hEorpa\",\n \"hr\": \"Dan Europe\",\n \"hu\": \"Eur\u00F3pa-nap\",\n \"it\": \"Festa dell'Europa\",\n \"ls\": \"Dan Evrope\",\n \"lt\": \"Europos diena\",\n \"lv\": \"Eiropas diena\",\n \"mt\": \"Jum l-Ewropa\",\n \"nl\": \"Dag van Europa ou Europadag\",\n \"pl\": \"Dzie\u0144 Europy\",\n \"pt\": \"Dia da Europa\",\n \"ro\": \"Ziua Europei\",\n \"sk\": \"De\u0148 Eur\u00F3py\",\n \"sq\": \"Dita e Evrop\u00EBs\",\n \"sv\": \"Europadagen\"\n }\n },\n \"06-29\": {\n \"name\": {\n \"en\": \"Saints Peter and Paul\",\n \"de\": \"Peter und Paul\",\n \"es\": \"San Pedro y San Pablo\",\n \"fr\": \"Saint Pierre et Paul\",\n \"it\": \"Santi Pietro e Paolo\",\n \"mt\": \"L-Imnarja\",\n \"nl\": \"Hoogfeest van Petrus en Paulus\",\n \"vi\": \"L\u1EC5 k\u00EDnh Th\u00E1nh Ph\u00EAr\u00F4\"\n }\n },\n \"08-15\": {\n \"name\": {\n \"en\": \"Assumption\",\n \"de\": \"Mari\u00E4 Himmelfahrt\",\n \"es\": \"Asunci\u00F3n\",\n \"fr\": \"Assomption\",\n \"el\": \"\u039A\u03BF\u03AF\u03BC\u03B7\u03C3\u03B7 \u03C4\u03B7\u03C2 \u0398\u03B5\u03BF\u03C4\u03CC\u03BA\u03BF\u03C5\",\n \"hr\": \"Velika Gospa\",\n \"it\": \"Ferragosto\",\n \"lt\": \"\u017Dolin\u0117\",\n \"mg\": \"Asompsiona\",\n \"mk\": \"\u0423\u0441\u043F\u0435\u043D\u0438\u0435 \u043D\u0430 \u041F\u0440\u0435\u0441\u0432\u0435\u0442\u0430 \u0411\u043E\u0433\u043E\u0440\u043E\u0434\u0438\u0446\u0430\",\n \"mt\": \"Santa Marija\",\n \"nl\": \"O.L.V. Hemelvaart\",\n \"pl\": \"Wniebowzi\u0119cie Naj\u015Bwi\u0119tszej Maryi Panny\",\n \"pt\": \"Assun\u00E7\u00E3o de Maria\",\n \"ro\": \"Adormirea Maicii Domnului\",\n \"sl\": \"Marijino vnebovzetje\",\n \"sq\": \"Sh\u00EBn M\u00EBria e Gushtit\",\n \"vi\": \"\u0110\u1EE9c M\u1EB9 L\u00EAn Tr\u1EDDi\"\n }\n },\n \"11-01\": {\n \"name\": {\n \"en\": \"All Saints' Day\",\n \"bs\": \"Dita e t\u00EB gjith\u00EB Shenjtor\u00EBve\",\n \"de\": \"Allerheiligen\",\n \"es\": \"Todos los Santos\",\n \"fi\": \"Pyh\u00E4inp\u00E4iv\u00E4\",\n \"fil\": \"Und\u00E1s; Todos los Santos; Araw ng mga Santo\",\n \"fr\": \"Toussaint\",\n \"hr\": \"Svi sveti\",\n \"hu\": \"Mindenszentek\",\n \"it\": \"Ognissanti\",\n \"lt\": \"Vis\u0173 \u0161vent\u0173j\u0173 diena\",\n \"mg\": \"Fetin'ny olo-masina\",\n \"mk\": \"\u041F\u0440\u0430\u0437\u043D\u0438\u043A\u043E\u0442 \u043D\u0430 \u0441\u0438\u0442\u0435 \u0441\u0432\u0435\u0442\u0446\u0438\",\n \"nl\": \"Allerheiligen\",\n \"pl\": \"Wszystkich \u015Awi\u0119tych\",\n \"pt\": \"Todos os santos\",\n \"sk\": \"Sviatok v\u0161etk\u00FDch sv\u00E4t\u00FDch\",\n \"sq\": \"T\u00EB gjitha Saints\",\n \"sr\": \"\u0421\u0432\u0438 \u0421\u0432\u0435\u0442\u0438\",\n \"sv\": \"Alla Helgons dag\",\n \"vi\": \"L\u1EC5 C\u00E1c Th\u00E1nh\"\n }\n },\n \"11-02\": {\n \"name\": {\n \"en\": \"All Souls' Day\",\n \"de\": \"Allerseelen\",\n \"es\": \"D\u00EDa de los Difuntos\",\n \"et\": \"hingedep\u00E4ev\",\n \"fil\": \"Araw ng mga Kaluluwa\",\n \"fr\": \"F\u00EAte des morts\",\n \"hr\": \"Du\u0161ni dan\",\n \"hu\": \"Halottak napja\",\n \"nl\": \"Allerzielen\",\n \"pt\": \"Dia de Finados\",\n \"vi\": \"L\u1EC5 C\u00E1c \u0110\u1EB3ng\",\n \"lt\": \"V\u0117lin\u0117s\"\n }\n },\n \"11-11\": {\n \"name\": {\n \"en\": \"Saint Martin\",\n \"de\": \"Sankt Martin (Faschingsbeginn)\",\n \"hu\": \"M\u00E1rton nap\",\n \"nl\": \"Sint Maarten\",\n \"vi\": \"L\u1EC5 th\u00E1nh Martin\"\n }\n },\n \"12-06\": {\n \"name\": {\n \"en\": \"Saint Nicholas\",\n \"de\": \"Sankt Nikolaus\",\n \"fr\": \"Saint-Nicolas\",\n \"hu\": \"Mikul\u00E1s\",\n \"nl\": \"Sinterklaas\",\n \"vi\": \"Th\u00E1nh Saint Nicholas\"\n }\n },\n \"12-08\": {\n \"name\": {\n \"en\": \"Immaculate Conception\",\n \"de\": \"Mari\u00E4 Empf\u00E4ngnis\",\n \"es\": \"La inmaculada concepci\u00F3n\",\n \"fr\": \"Immacul\u00E9e Conception\",\n \"it\": \"Immacolata Concezione\",\n \"mt\": \"Il-Kun\u010Bizzjoni\",\n \"nl\": \"Onbevlekte Ontvangenis van Maria\",\n \"pt\": \"Imaculada Concei\u00E7\u00E3o\"\n }\n },\n \"12-24\": {\n \"name\": {\n \"en\": \"Christmas Eve\",\n \"bg\": \"\u0411\u044A\u0434\u043D\u0438 \u0432\u0435\u0447\u0435\u0440\",\n \"bs\": \"Badnji dan\",\n \"cz\": \"\u0160t\u011Bdr\u00FD den\",\n \"da\": \"Juleaften\",\n \"de\": \"Heiliger Abend\",\n \"es\": \"Nochebuena\",\n \"et\": \"j\u00F5ululaup\u00E4ev\",\n \"fo\": \"J\u00F3laaftan\",\n \"fi\": \"Jouluaatto\",\n \"fil\": \"Bisperas ng Pasko\",\n \"fr\": \"Veille de No\u00EBl\",\n \"hr\": \"Badnji dan\",\n \"hu\": \"Szenteste\",\n \"is\": \"A\u00F0fangadagur\",\n \"kl\": \"juulliaraq\",\n \"lt\": \"\u0160v. K\u016B\u010Dios\",\n \"lv\": \"Ziemassv\u0113tku vakars\",\n \"ms\": \"Hari Sebelum Krismas\",\n \"nl\": \"Kerstavond\",\n \"no\": \"Julaften\",\n \"pt\": \"Noite de Natal\",\n \"sk\": \"\u0160tedr\u00FD de\u0148\",\n \"sq\": \"Nata e Krishtlindjes\",\n \"sr\": \"\u0411\u0430\u0434\u045A\u0438 \u0434\u0430\u043D\",\n \"sv\": \"Julafton\",\n \"vi\": \"\u0110\u00EAm Gi\u00E1ng Sinh\"\n }\n },\n \"12-25\": {\n \"name\": {\n \"en\": \"Christmas Day\",\n \"am\": \"\u120D\u12F0\u1270-\u1208\u12A5\u130D\u12DA\u12A5\u1290/ \u1308\u1293\",\n \"ar\": \"\u0639\u064A\u062F \u0627\u0644\u0645\u064A\u0644\u0627\u062F \u0627\u0644\u0645\u062C\u064A\u062F\",\n \"bg\": \"\u041A\u043E\u043B\u0435\u0434\u0430\",\n \"bn\": \"\u09AC\u09A1\u09BC\u09A6\u09BF\u09A8\",\n \"bs\": \"Bo\u017Ei\u0107\",\n \"de-at\": \"Christtag\",\n \"ca\": \"Nadal\",\n \"cz\": \"1. sv\u00E1tek v\u00E1no\u010Dn\u00ED\",\n \"da\": \"Juledag\",\n \"de\": \"Weihnachten\",\n \"de-ch\": \"Weihnachtstag\",\n \"el\": \"\u03A7\u03C1\u03B9\u03C3\u03C4\u03BF\u03CD\u03B3\u03B5\u03BD\u03BD\u03B1\",\n \"es\": \"Navidad\",\n \"et\": \"esimene j\u00F5ulup\u00FCha\",\n \"fi\": \"Joulup\u00E4iv\u00E4\",\n \"fil\": \"Araw ng Pasko\",\n \"fo\": \"Fyrsti j\u00F3ladagur\",\n \"fr\": \"No\u00EBl\",\n \"hr\": \"Bo\u017Ei\u0107\",\n \"hu\": \"Kar\u00E1csony\",\n \"hy\": \"\u054D\u0578\u0582\u0580\u0562 \u053E\u0576\u0578\u0582\u0576\u0564\",\n \"id\": \"Hari Raya Natal\",\n \"it\": \"Natale\",\n \"is\": \"J\u00F3ladagur\",\n \"jp\": \"\u30CE\u30A8\u30EB\",\n \"kl\": \"juullerujussuaq\",\n \"ko\": \"\uAE30\uB3C5\uD0C4\uC2E0\uC77C\",\n \"lt\": \"\u0160v. Kal\u0117dos\",\n \"lv\": \"Ziemassv\u0113tki\",\n \"mg\": \"Krismasy\",\n \"mk\": \"\u041A\u0430\u0442\u043E\u043B\u0438\u0447\u043A\u0438 \u0411\u043E\u0436\u0438\u045C\",\n \"ms\": \"Hari Krismas\",\n \"mt\": \"Il-Milied\",\n \"nl\": \"Kerstmis\",\n \"no\": \"F\u00F8rste Juledag\",\n \"pap\": \"Dia Pasco di Nascimento\",\n \"pl\": \"Pierwszy dzie\u0144 Bo\u017Cego Narodzenia\",\n \"pt\": \"Natal\",\n \"ro\": \"Cr\u0103ciunul\",\n \"ru\": \"\u0420\u043E\u0436\u0434\u0435\u0441\u0442\u0432\u043E \u0425\u0440\u0438\u0441\u0442\u043E\u0432\u043E\",\n \"sk\": \"Prv\u00FD sviatok viano\u010Dn\u00FD\",\n \"sl\": \"Bo\u017Ei\u010D\",\n \"sq\": \"Krishtlindja\",\n \"sr\": \"\u041A\u0430\u0442\u043E\u043B\u0438\u0447\u043A\u0438 \u0411\u043E\u0436\u0438\u045B\",\n \"sv\": \"Juldagen\",\n \"sw\": \"Krismasi\",\n \"vi\": \"L\u1EC5 Gi\u00E1ng Sinh\",\n \"ti\": \"\u120D\u12F0\u1275\",\n \"zh\": \"\u8056\u8A95\u7BC0\"\n }\n },\n \"12-26\": {\n \"name\": {\n \"en\": \"Boxing Day\",\n \"bg\": \"2-\u0440\u0438 \u0434\u0435\u043D \u043D\u0430 \u041A\u043E\u043B\u0435\u0434\u0430\",\n \"cz\": \"2. sv\u00E1tek v\u00E1no\u010Dn\u00ED\",\n \"da\": \"Anden Juledag\",\n \"de\": \"2. Weihnachtstag\",\n \"de-at\": \"Stefanitag\",\n \"de-ch\": \"Stephanstag\",\n \"el\": \"\u0394\u03B5\u03CD\u03C4\u03B5\u03C1\u03B7 \u03BC\u03AD\u03C1\u03B1 \u03C4\u03C9\u03BD \u03A7\u03C1\u03B9\u03C3\u03C4\u03BF\u03C5\u03B3\u03AD\u03BD\u03BD\u03C9\u03BD\",\n \"es\": \"San Esteban\",\n \"et\": \"teine j\u00F5ulup\u00FCha\",\n \"fi\": \"2. joulup\u00E4iv\u00E4\",\n \"fo\": \"Fyrsti gerandisdagur eftir j\u00F3ladag\",\n \"fr\": \"Lendemain de No\u00EBl\",\n \"hr\": \"Svetog Stjepana\",\n \"hu\": \"Kar\u00E1csony m\u00E1snapja\",\n \"it\": \"Santo Stefano\",\n \"is\": \"Annar \u00ED j\u00F3lum\",\n \"kl\": \"juullip aappaa\",\n \"lt\": \"2. Kal\u0117d\u0173 diena\",\n \"lv\": \"Otrie Ziemassv\u0113tki\",\n \"nl\": \"Tweede kerstdag\",\n \"no\": \"Andre juledag\",\n \"pap\": \"Di dos Dia Pasco di Nascimento\",\n \"pl\": \"Drugi dzie\u0144 Bo\u017Cego Narodzenia\",\n \"ro\": \"Dou\u0103 zi de Cr\u0103ciun\",\n \"sk\": \"Druh\u00FD sviatok viano\u010Dn\u00FD\",\n \"sv\": \"Annandag jul\",\n \"vi\": \"Ng\u00E0y t\u1EB7ng qu\u00E0\"\n }\n },\n \"12-31\": {\n \"name\": {\n \"en\": \"New Year's Eve\",\n \"da\": \"Nyt\u00E5rsaften\",\n \"de\": \"Silvester\",\n \"es\": \"Fin del A\u00F1o\",\n \"fi\": \"Uudenvuodenaatto\",\n \"fil\": \"Bisperas ng Bagong Taon\",\n \"fo\": \"N\u00FDggj\u00E1rsaftan\",\n \"fr\": \"Saint-Sylvestre\",\n \"hu\": \"Szilveszter\",\n \"hy\": \"\u0546\u0578\u0580 \u057F\u0561\u0580\u057E\u0561 \u0563\u056B\u0577\u0565\u0580\",\n \"is\": \"Gaml\u00E1rsdagur\",\n \"it\": \"Ultimo dell\u2019anno\",\n \"jp\": \"\u5927\u6666\u65E5\",\n \"lv\": \"Vecgada vakars\",\n \"nl\": \"Oudejaarsavond\",\n \"no\": \"Nytt\u00E5rsaften\",\n \"pt\": \"V\u00E9spera de Ano Novo\",\n \"sv\": \"Ny\u00E5rsafton\",\n \"vi\": \"\u0110\u00EAm giao th\u1EEBa\"\n }\n },\n \"easter -48\": {\n \"name\": {\n \"en\": \"Shrove Monday\",\n \"de\": \"Rosenmontag\",\n \"es\": \"Carnaval\",\n \"fr\": \"Lundi de Carnaval\",\n \"nl\": \"Carnavalmaandag\",\n \"pap\": \"Dialuna di Carnaval\",\n \"vi\": \"Ng\u00E0y th\u1EE9 hai hoa h\u1ED3ng\"\n }\n },\n \"easter -47\": {\n \"name\": {\n \"en\": \"Shrove Tuesday\",\n \"es\": \"Carnaval\",\n \"de\": \"Faschingsdienstag\",\n \"hr\": \"Pokladni utorak\",\n \"hu\": \"H\u00FAshagy\u00F3 kedd\",\n \"nl\": \"Vastenavond\",\n \"pt\": \"Carnaval\",\n \"vi\": \"Th\u1EE9 ba m\u1EADp b\u00E9o\"\n }\n },\n \"easter -46\": {\n \"name\": {\n \"en\": \"Ash Wednesday\",\n \"de\": \"Aschermittwoch\",\n \"es\": \"Miercoles de Ceniza\",\n \"fr\": \"Mercredi des Cendres\",\n \"hu\": \"Hamvaz\u00F3szerda\",\n \"it\": \"Ceneri\",\n \"is\": \"\u00D6skudagur\",\n \"nl\": \"Aswoensdag\",\n \"pt\": \"Quarta-feira de Cinzas\",\n \"sw\": \"Jumatano ya Majivu\",\n \"vi\": \"Th\u1EE9 t\u01B0 L\u1EC5 Tro\"\n }\n },\n \"easter -7\": {\n \"name\": {\n \"en\": \"Palm Sunday\",\n \"de\": \"Palmsonntag\",\n \"es\": \"Domingo de Ramos\",\n \"hu\": \"Vir\u00E1gvas\u00E1rnap\",\n \"it\": \"Domenica delle Palme\",\n \"is\": \"P\u00E1lmasunnudagur\",\n \"nl\": \"Palmzondag\",\n \"no\": \"Palmes\u00F8ndag\",\n \"vi\": \"Ch\u00FAa nh\u1EADt L\u1EC5 L\u00E1\"\n }\n },\n \"easter -3\": {\n \"name\": {\n \"en\": \"Maundy Thursday\",\n \"cz\": \"Zelen\u00FD \u010Dtvrtek\",\n \"da\": \"Sk\u00E6rtorsdag\",\n \"de\": \"Gr\u00FCndonnerstag\",\n \"es\": \"Jueves Santo\",\n \"fil\": \"Huwebes Santo\",\n \"fo\": \"Sk\u00EDrh\u00F3sdagur\",\n \"fr\": \"Jeudi saint\",\n \"is\": \"Sk\u00EDrdagur\",\n \"it\": \"Gioved\u00EC santo\",\n \"kl\": \"sisamanngortoq illernartoq\",\n \"nl\": \"Witte donderdag\",\n \"no\": \"Skj\u00E6rtorsdag\",\n \"sv\": \"Sk\u00E4rtorsdagen\",\n \"vi\": \"Th\u1EE9 n\u0103m Tu\u1EA7n Th\u00E1nh\"\n }\n },\n \"easter -2\": {\n \"name\": {\n \"en\": \"Good Friday\",\n \"am\": \"\u1235\u1245\u1208\u1275\",\n \"bg\": \"\u0420\u0430\u0437\u043F\u0435\u0442\u0438 \u043F\u0435\u0442\u044A\u043A\",\n \"bs\": \"Dobar petak\",\n \"cz\": \"Velk\u00FD p\u00E1tek\",\n \"da\": \"Langfredag\",\n \"de\": \"Karfreitag\",\n \"es\": \"Viernes Santo\",\n \"fi\": \"Pitk\u00E4perjantai\",\n \"fil\": \"Biyernes Santo\",\n \"fo\": \"Langafr\u00EDggjadagur\",\n \"fr\": \"Vendredi saint\",\n \"el\": \"\u039C\u03B5\u03B3\u03AC\u03BB\u03B7 \u03A0\u03B1\u03C1\u03B1\u03C3\u03BA\u03B5\u03C5\u03AE\",\n \"et\": \"suur reede\",\n \"ge\": \"\u10EC\u10D8\u10D7\u10D4\u10DA\u10D8 \u10DE\u10D0\u10E0\u10D0\u10E1\u10D9\u10D4\u10D5\u10D8\",\n \"hr\": \"Veliki petak\",\n \"hu\": \"Nagyp\u00E9ntek\",\n \"id\": \"Wafat Yesus Kristus\",\n \"it\": \"Venerd\u00EC santo\",\n \"is\": \"F\u00F6studagurinn langi\",\n \"kl\": \"tallimanngornersuaq\",\n \"lv\": \"Liel\u0101 Piektdiena\",\n \"ms\": \"Jumat Agung\",\n \"mt\": \"Il-\u0120img\u0127a l-Kbira\",\n \"nl\": \"Goede Vrijdag\",\n \"no\": \"Langfredag\",\n \"pap\": \"Diabierna Santo\",\n \"pt\": \"Sexta-Feira Santa\",\n \"ro\": \"Vinerea Mare\",\n \"sk\": \"Ve\u013Ekono\u010Dn\u00FD piatok\",\n \"sq\": \"E Premtja e Madhe\",\n \"sr\": \"\u041A\u0430\u0442\u043E\u043B\u0438\u0447\u043A\u0438 \u0412\u0435\u043B\u0438\u043A\u0438 \u043F\u0435\u0442\u0430\u043A\",\n \"sv\": \"L\u00E5ngfredagen\",\n \"sw\": \"Ijumaa Kuu\",\n \"vi\": \"Th\u1EE9 s\u00E1u Tu\u1EA7n Th\u00E1nh\",\n \"zh\": \"\u8036\u7A4C\u53D7\u96E3\u7BC0\"\n }\n },\n \"easter -1\": {\n \"name\": {\n \"en\": \"Easter Saturday\",\n \"cz\": \"B\u00EDl\u00E1 sobota\",\n \"de\": \"Karsamstag\",\n \"es\": \"Sabado Santo\",\n \"fil\": \"Sabado de Gloria\",\n \"fr\": \"Samedi saint\",\n \"ge\": \"\u10D3\u10D8\u10D3\u10D8 \u10E8\u10D0\u10D1\u10D0\u10D7\u10D8\",\n \"hu\": \"Nagyszombat\",\n \"it\": \"Sabado santo\",\n \"nl\": \"Dag voor Pasen\",\n \"no\": \"P\u00E5skeaften\",\n \"sv\": \"P\u00E5skafton\",\n \"vi\": \"Th\u1EE9 b\u1EA3y Tu\u1EA7n Th\u00E1nh\",\n \"zh\": \"\u8036\u7A4C\u53D7\u96E3\u7BC0\u7FCC\u65E5\"\n }\n },\n \"easter\": {\n \"name\": {\n \"en\": \"Easter Sunday\",\n \"am\": \"\u134B\u1232\u12AB\",\n \"bg\": \"\u0412\u0435\u043B\u0438\u043A\u0434\u0435\u043D\",\n \"bs\": \"Vaskrs\",\n \"cz\": \"Velikono\u010Dn\u00ED ned\u011Ble\",\n \"da\": \"P\u00E5skes\u00F8ndag\",\n \"de\": \"Ostersonntag\",\n \"el\": \"\u03A0\u03AC\u03C3\u03C7\u03B1\",\n \"es\": \"Pascua\",\n \"et\": \"lihav\u00F5tted\",\n \"fi\": \"P\u00E4\u00E4si\u00E4isp\u00E4iv\u00E4\",\n \"fil\": \"Pasko ng Pagkabuhay\",\n \"fo\": \"P\u00E1skadagur\",\n \"fr\": \"P\u00E2ques\",\n \"ge\": \"\u10D0\u10E6\u10D3\u10D2\u10DD\u10DB\u10D0\",\n \"hr\": \"Uskrs\",\n \"hu\": \"H\u00FAsv\u00E9tvas\u00E1rnap\",\n \"it\": \"Domenica di Pasqua\",\n \"is\": \"P\u00E1skadagur\",\n \"kl\": \"poorskip-ullua\",\n \"lt\": \"Velykos\",\n \"lv\": \"Lieldienas\",\n \"nl\": \"Pasen\",\n \"no\": \"F\u00F8rste p\u00E5skedag\",\n \"pap\": \"Dia Pasco di Resureccion\",\n \"pl\": \"Niedziela Wielkanocna\",\n \"pt\": \"P\u00E1scoa\",\n \"ro\": \"Pa\u0219tele\",\n \"sk\": \"Ve\u013Ek\u00E1 noc\",\n \"sl\": \"Velika no\u010D\",\n \"sq\": \"Pashk\u00EBt Katolike\",\n \"sr\": \"\u041A\u0430\u0442\u043E\u043B\u0438\u0447\u043A\u0438 \u0412\u0430\u0441\u043A\u0440\u0441\",\n \"sv\": \"P\u00E5skdagen\",\n \"sw\": \"Pasaka\",\n \"vi\": \"L\u1EC5 Ph\u1EE5c Sinh\",\n \"zh\": \"\u590D\u6D3B\u8282\"\n }\n },\n \"easter 1\": {\n \"name\": {\n \"en\": \"Easter Monday\",\n \"bg\": \"\u0412\u0435\u043B\u0438\u043A\u0438 \u043F\u043E\u043D\u0435\u0434\u0435\u043B\u043D\u0438\u043A\",\n \"bs\": \"Uskrsni ponedjeljak\",\n \"cz\": \"Velikono\u010Dn\u00ED pond\u011Bl\u00ED\",\n \"da\": \"Anden p\u00E5skedag\",\n \"de\": \"Ostermontag\",\n \"el\": \"\u0394\u03B5\u03C5\u03C4\u03AD\u03C1\u03B1 \u03C4\u03BF\u03C5 \u03A0\u03AC\u03C3\u03C7\u03B1\",\n \"es\": \"Lunes de Pascua\",\n \"fi\": \"2. p\u00E4\u00E4si\u00E4isp\u00E4iv\u00E4\",\n \"fo\": \"Annar p\u00E1skadagur\",\n \"fr\": \"Lundi de P\u00E2ques\",\n \"ge\": \"\u10D0\u10E6\u10D3\u10D2\u10DD\u10DB\u10D8\u10E1 \u10DD\u10E0\u10E8\u10D0\u10D1\u10D0\u10D7\u10D8\",\n \"hr\": \"Uskr\u0161nji ponedjeljak\",\n \"hu\": \"H\u00FAsv\u00E9th\u00E9tf\u0151\",\n \"it\": \"Luned\u00EC dell\u2019Angelo\",\n \"is\": \"Annar \u00ED p\u00E1skum\",\n \"kl\": \"poorskip-aappaa\",\n \"lv\": \"Otr\u0101s Lieldienas\",\n \"mg\": \"Alatsinain'ny Paska\",\n \"mk\": \"\u0432\u0442\u043E\u0440\u0438\u043E\u0442 \u0434\u0435\u043D \u043D\u0430 \u0412\u0435\u043B\u0438\u0433\u0434\u0435\u043D\",\n \"nl\": \"Tweede paasdag\",\n \"no\": \"Andre p\u00E5skedag\",\n \"pap\": \"Di dos Dia Pasco di Resureccion\",\n \"pl\": \"Drugi dzie\u0144 Wielkanocy\",\n \"ro\": \"Dou\u0103 zi de Pasti\",\n \"sk\": \"Ve\u013Ekono\u010Dn\u00FD pondelok\",\n \"sl\": \"Velikono\u010Dni ponedeljek\",\n \"sr\": \"\u041A\u0430\u0442\u043E\u043B\u0438\u0447\u043A\u0438 \u0412\u0430\u0441\u043A\u0440\u0441\u043D\u0438 \u043F\u043E\u043D\u0435\u0434\u0435\u0459\u0430\u043A\",\n \"sv\": \"Annandag p\u00E5sk\",\n \"sw\": \"Jumatatu ya Pasaka\",\n \"vi\": \"Th\u1EE9 hai ph\u1EE5c sinh\",\n \"zh\": \"\u5FA9\u6D3B\u7BC0\u661F\u671F\u4E00\"\n }\n },\n \"easter 39\": {\n \"name\": {\n \"en\": \"Ascension Day\",\n \"da\": \"Kristi Himmelfartsdag\",\n \"de\": \"Christi Himmelfahrt\",\n \"es\": \"La Asunci\u00F3n\",\n \"fi\": \"Helatorstai\",\n \"fo\": \"Kristi Himmalsfer\u00F0ardagur\",\n \"fr\": \"Ascension\",\n \"id\": \"Kenaikan Yesus Kristus\",\n \"it\": \"Ascensione\",\n \"is\": \"Uppstigningardagur\",\n \"kl\": \"qilaliarfik\",\n \"mg\": \"Andro niakarana\",\n \"nl\": \"O.L.H. Hemelvaart\",\n \"no\": \"Kristi himmelfartsdag\",\n \"pap\": \"Dia di Asuncion\",\n \"ro\": \"Ziua Eroilor\",\n \"sv\": \"Kristi himmelf\u00E4rds dag\",\n \"vi\": \"L\u1EC5 Th\u0103ng Thi\u00EAn\"\n }\n },\n \"easter 49\": {\n \"name\": {\n \"en\": \"Pentecost\",\n \"da\": \"Pinsedag\",\n \"de\": \"Pfingstsonntag\",\n \"el\": \"\u03A0\u03B5\u03BD\u03C4\u03B7\u03BA\u03BF\u03C3\u03C4\u03AE\",\n \"es\": \"Pentecost\u00E9s\",\n \"et\": \"nelip\u00FChade 1. p\u00FCha\",\n \"fi\": \"Helluntaip\u00E4iv\u00E4\",\n \"fo\": \"Hv\u00EDtusunnudagur\",\n \"fr\": \"Pentec\u00F4te\",\n \"hu\": \"P\u00FCnk\u00F6sdvas\u00E1rnap\",\n \"it\": \"Pentecoste\",\n \"is\": \"Hv\u00EDtasunnudagur\",\n \"kl\": \"piinsip ullua\",\n \"nl\": \"Pinksteren\",\n \"no\": \"F\u00F8rste pinsedag\",\n \"mk\": \"\u0414\u0443\u0445\u043E\u0432\u0434\u0435\u043D\",\n \"pl\": \"Zielone \u015Awi\u0105tki\",\n \"ro\": \"Rusaliile\",\n \"sl\": \"Binko\u0161ti\",\n \"sv\": \"Pingstdagen\",\n \"uk\": \"\u0422\u0440\u0456\u0439\u0446\u044F\",\n \"vi\": \"L\u1EC5 Ch\u00FAa Th\u00E1nh Th\u1EA7n Hi\u1EC7n Xu\u1ED1ng\"\n }\n },\n \"easter 50\": {\n \"name\": {\n \"en\": \"Whit Monday\",\n \"da\": \"Anden Pinsedag\",\n \"de\": \"Pfingstmontag\",\n \"el\": \"\u0391\u03B3\u03AF\u03BF\u03C5 \u03A0\u03BD\u03B5\u03CD\u03BC\u03B1\u03C4\u03BF\u03C2\",\n \"es\": \"Lunes de Pentecost\u00E9s\",\n \"fo\": \"Annar hv\u00EDtusunnudagur\",\n \"fr\": \"Lundi de Pentec\u00F4te\",\n \"hu\": \"P\u00FCnk\u00F6sdh\u00E9tf\u0151\",\n \"is\": \"Annar \u00ED hv\u00EDtasunnu\",\n \"it\": \"Luned\u00EC di Pentecoste\",\n \"kl\": \"piinsip aappaa\",\n \"mg\": \"Alatsinain'ny Pentekosta\",\n \"nl\": \"Tweede pinksterdag\",\n \"no\": \"Andre pinsedag\",\n \"ro\": \"Dou\u0103 zi de Rusalii\",\n \"sv\": \"Annandag pingst\"\n }\n },\n \"easter 60\": {\n \"name\": {\n \"en\": \"Corpus Christi\",\n \"de\": \"Fronleichnam\",\n \"es\": \"Corpus Christi\",\n \"fr\": \"la F\u00EAte-Dieu\",\n \"it\": \"Corpus Domini\",\n \"hr\": \"Tijelovo\",\n \"nl\": \"Sacramentsdag\",\n \"pl\": \"Dzie\u0144 Bo\u017Cego Cia\u0142a\",\n \"pt\": \"Corpo de Deus\",\n \"vi\": \"L\u1EC5 M\u00ECnh v\u00E0 M\u00E1u Th\u00E1nh Ch\u00FAa Kit\u00F4\"\n }\n },\n \"julian 01-01\": {\n \"name\": {\n \"en\": \"Orthodox New Year\",\n \"bs\": \"Pravoslavni novogodi\u0161nji dan\",\n \"hr\": \"Pravoslavna Nova Godina\",\n \"nl\": \"Orthodox Nieuwjaar\",\n \"sq\": \"Viti i Ri Ortodoks\",\n \"sr\": \"\u041F\u0440\u0430\u0432\u043E\u0441\u043B\u0430\u0432\u043D\u0430 \u041D\u043E\u0432\u0430 \u0433\u043E\u0434\u0438\u043D\u0430\"\n }\n },\n \"julian 12-24\": {\n \"name\": {\n \"en\": \"Orthodox Christmas Eve\",\n \"nl\": \"Orthodox Kerstavond\",\n \"mk\": \"\u0411\u0430\u0434\u043D\u0438\u043A\",\n \"ti\": \"\u120D\u12F0\u1275\"\n }\n },\n \"julian 12-25\": {\n \"name\": {\n \"en\": \"Orthodox Christmas\",\n \"bs\": \"Pravoslavni Bo\u017Ei\u0107\",\n \"hr\": \"Pravoslavni Bo\u017Ei\u0107\",\n \"mk\": \"\u041F\u0440\u0432 \u0434\u0435\u043D \u0411\u043E\u0436\u0438\u043A\",\n \"nl\": \"Orthodox Kerstmis\",\n \"ro\": \"Craciun pe Rit Vechi\",\n \"sq\": \"Krishtlindjet Ortodokse\",\n \"sr\": \"\u0411\u043E\u0436\u0438\u045B\",\n \"uk\": \"\u0420\u0456\u0437\u0434\u0432\u043E\"\n }\n },\n \"orthodox -2\": {\n \"name\": {\n \"en\": \"Orthodox Good Friday\",\n \"mk\": \"\u0412\u0435\u043B\u0438\u043A\u0438 \u041F\u0435\u0442\u043E\u043A\",\n \"nl\": \"Orthodoxe Goede vrijdag\",\n \"sr\": \"\u0412\u0435\u043B\u0438\u043A\u0438 \u043F\u0435\u0442\u0430\u043A\",\n \"ti\": \"\u12D3\u122D\u1262 \u1235\u1245\u1208\u1275\"\n }\n },\n \"orthodox\": {\n \"name\": {\n \"en\": \"Orthodox Easter\",\n \"bs\": \"Pravoslavni Vaskrs\",\n \"hr\": \"Pravoslavni Uskrs\",\n \"mk\": \"\u041F\u0440\u0432 \u0434\u0435\u043D \u0412\u0435\u043B\u0438\u0433\u0434\u0435\u043D\",\n \"nl\": \"Orthodox Pasen\",\n \"sq\": \"Pashk\u00EBt Ortodokse\",\n \"sr\": \"\u0412\u0430\u0441\u043A\u0440\u0441\",\n \"ti\": \"\u134B\u1232\u12AB\",\n \"uk\": \"\u0412\u0435\u043B\u0438\u043A\u0434\u0435\u043D\u044C\"\n }\n },\n \"orthodox 1\": {\n \"name\": {\n \"en\": \"Orthodox Easter Monday\",\n \"mk\": \"\u0412\u0442\u043E\u0440 \u0434\u0435\u043D \u0412\u0435\u043B\u0438\u0433\u0434\u0435\u043D\",\n \"nl\": \"Orthodoxe Tweede Paasdag\",\n \"sr\": \"\u0412\u0430\u0441\u043A\u0440\u0441\u043D\u0438 \u043F\u043E\u043D\u0435\u0434\u0435\u0459\u0430\u043A\"\n }\n },\n \"1 Muharram\": {\n \"name\": {\n \"en\": \"Islamic New Year\",\n \"ar\": \"\u0631\u0623\u0633 \u0627\u0644\u0633\u0646\u0629 \u0627\u0644\u0647\u062C\u0631\u064A\u0629\",\n \"bs\": \"Nova hid\u017Eretska godina\",\n \"fil\": \"Unang Araw ng Muharram\",\n \"fr\": \"Nouvel an islamique\",\n \"hr\": \"Nova hid\u017Eretska godina\",\n \"id\": \"Tahun Baru Islam\",\n \"ms\": \"Awal Muharram\",\n \"nl\": \"Islamitisch Nieuwjaar\",\n \"sq\": \"Viti i Ri hixhri\"\n }\n },\n \"10 Muharram\": {\n \"name\": {\n \"en\": \"Day of Ashura\",\n \"ar\": \"\u0639\u0627\u0634\u0648\u0631\u0627\u0621\",\n \"bn\": \"\u0986\u09B6\u09C1\u09B0\u09BE\",\n \"nl\": \"Asjoera\"\n }\n },\n \"12 Rabi al-awwal\": {\n \"name\": {\n \"en\": \"Birthday of Muhammad (Mawlid)\",\n \"am\": \"\u1218\u12CD\u120A\u12F5\",\n \"ar\": \"\u0627\u0644\u0645\u0648\u0644\u062F \u0627\u0644\u0646\u0628\u0648\u064A\u0651\",\n \"bn\": \"\u0988\u09A6\u09C7 \u09AE\u09BF\u09B2\u09BE\u09A6\u09C1\u09A8\u09CD\u09A8\u09AC\u09C0\",\n \"bs\": \"Mevlud\",\n \"fr\": \"Mawlid\",\n \"id\": \"Maulid Nabi Muhammad\",\n \"ms\": \"Hari Keputeraan Nabi Muhammad S.A.W.\",\n \"nl\": \"Mawlid an-Nabi\",\n \"sq\": \"Mevludi\"\n }\n },\n \"27 Rajab\": {\n \"name\": {\n \"en\": \"Laylat al-Mi'raj\",\n \"ar\": \"\u0627\u0644\u0625\u0633\u0631\u0627\u0621 \u0648\u0627\u0644\u0645\u0639\u0631\u0627\u062C\",\n \"bs\": \"Lejletul Mi'rad\u017E\",\n \"id\": \"Maulid Nabi Muhammad\",\n \"ms\": \"Israk dan Mikraj\",\n \"nl\": \"Laylat al-Miraadj\",\n \"sq\": \"Nata e Miraxhit\",\n \"tr\": \"Mira\u00E7 Gecesi\"\n }\n },\n \"15 Shaban\": {\n \"name\": {\n \"en\": \"Laylat al-Bara'at\",\n \"ar\": \"\u0644\u064A\u0644\u0629 \u0627\u0644\u0628\u0631\u0627\u0621\u0629\",\n \"bs\": \"Lejletul berat\",\n \"nl\": \"Laylat al-Baraat\",\n \"sq\": \"Nata e Beratit\"\n }\n },\n \"1 Ramadan\": {\n \"name\": {\n \"en\": \"First day of Ramadan\",\n \"am\": \"\u1228\u1218\u12F3\u1295\",\n \"ar\": \"\u0627\u0644\u064A\u0648\u0645 \u0627\u0644\u0623\u0648\u0644 \u0645\u0646 \u0631\u0645\u0636\u0627\u0646\",\n \"bs\": \"Prvi dan posta\",\n \"ms\": \"Awal Ramadan\",\n \"nl\": \"Eerste dag van Ramadan\",\n \"sq\": \"Dita e par\u00EB e agj\u00EBrimit\"\n }\n },\n \"17 Ramadan\": {\n \"name\": {\n \"en\": \"Day of Nuzul Al-Quran\",\n \"ms\": \"Hari Nuzul Al-Quran\"\n }\n },\n \"23 Ramadan\": {\n \"name\": {\n \"en\": \"Lailat al-Qadr\"\n }\n },\n \"27 Ramadan\": {\n \"name\": {\n \"en\": \"Laylat al-Qadr\",\n \"ar\": \"\u0644\u06CC\u0644\u0629 \u0627\u0644\u0642\u062F\u0631\",\n \"bs\": \"Lejletul kadr\",\n \"nl\": \"Waardevolle Nacht (Laylat al-Qadr)\",\n \"sq\": \"Nata e Kadrit\"\n }\n },\n \"1 Shawwal\": {\n \"name\": {\n \"en\": \"End of Ramadan (Eid al-Fitr)\",\n \"am\": \"\u12D2\u12F5 \u12A0\u120D \u1348\u1325\u122D\",\n \"ar\": \"\u0639\u064A\u062F \u0627\u0644\u0641\u0637\u0631\",\n \"az\": \"Ramazan Bayram\u0131\",\n \"bn\": \"\u0988\u09A6\u09C1\u09B2 \u09AB\u09BF\u09A4\u09B0\",\n \"bs\": \"Ramazanski bajram\",\n \"de\": \"Zuckerfest\",\n \"es\": \"Fiesta del Eid Fitr\",\n \"fa\": \"\uFECB\uFBFF\uFEAA \uFEB3\uFECC\uFBFF\uFEAA \uFED3\uFEC4\uFEAE\",\n \"fil\": \"Pagwawakas ng Ramadan\",\n \"fr\": \"F\u00EAte de fin du Ramadan\",\n \"hr\": \"Ramazanski bajram\",\n \"id\": \"Hari Raya Idul Fitri\",\n \"nl\": \"Suikerfeest (Eid al-Fitr)\",\n \"mk\": \"\u0420\u0430\u043C\u0430\u0437\u0430\u043D \u0411\u0430\u0458\u0440\u0430\u043C\",\n \"ms\": \"Hari Raya Aidil Fitri\",\n \"sq\": \"Fit\u00EBr Bajrami\",\n \"tr\": \"Ramazan Bayram\u0131\",\n \"sr\": \"\u0420\u0430\u043C\u0430\u0437\u0430\u043D\u0441\u043A\u0438 \u0411\u0430\u0458\u0440\u0430\u043C\",\n \"sw\": \"Idd-ul-Fitr\"\n }\n },\n \"9 Dhu al-Hijjah\": {\n \"name\": {\n \"en\": \"Arafat Day\",\n \"ar\": \"\u064A\u0648\u0645 \u0639\u0631\u0641\u0629\",\n \"es\": \"Fiesta del Sacrificio-Eidul Adha\",\n \"ms\": \"Hari Arafah\"\n }\n },\n \"10 Dhu al-Hijjah\": {\n \"name\": {\n \"en\": \"Feast of the Sacrifice (Eid al-Adha)\",\n \"am\": \"\u12D2\u12F5 \u12A0\u120D \u12A0\u12F5\u1210\",\n \"ar\": \"\u0639\u064A\u062F \u0627\u0644\u0623\u0636\u062D\u0649\",\n \"az\": \"Qurban Bayram\u0131\",\n \"bn\": \"\u0988\u09A6\u09C1\u09B2 \u0986\u09AF\u09B9\u09BE\",\n \"bs\": \"Kurbanski bajram\",\n \"de\": \"Opferfest\",\n \"es\": \"Fiesta del Sacrificio-Aid Al Adha\",\n \"fa\": \"\uFECB\uFBFF\uFEAA \uFEB3\uFECC\uFBFF\uFEAA \uFED7\uFEAE\uFE91\uFE8E\u0646\",\n \"fil\": \"Eidul Adha\",\n \"fr\": \"F\u00EAte du mouton\",\n \"hr\": \"Kurban-bajram\",\n \"id\": \"Hari Raya Idul Adha\",\n \"nl\": \"Offerfeest (Eid Al-Adha)\",\n \"mk\": \"\u041A\u0443\u0440\u0431\u0430\u043D \u0411\u0430\u0458\u0440\u0430\u043C\",\n \"ms\": \"Hari Raya Haji\",\n \"sq\": \"Kurban Bajrami\",\n \"tr\": \"Kurban Bayram\u0131\",\n \"sr\": \"\u041A\u0443\u0440\u0431\u0430\u043D\u0441\u043A\u0438 \u0411\u0430\u0458\u0440\u0430\u043C\",\n \"sw\": \"Idd-ul-Azha\"\n }\n },\n \"15 Nisan\": {\n \"name\": {\n \"en\": \"Pesach\",\n \"bs\": \"Pesah\",\n \"de\": \"Pessach\",\n \"hr\": \"Pesa\u010D\",\n \"nl\": \"Pesach\",\n \"sq\": \"Pesach\",\n \"sr\": \"\u041F\u0435\u0441\u0430\u0445\"\n }\n },\n \"1 Tishrei\": {\n \"name\": {\n \"en\": \"Rosh Hashanah\",\n \"bs\": \"Ro\u0161 Ha\u0161ana\",\n \"de\": \"Rosch Haschana\",\n \"hr\": \"Ro\u0161 Ha\u0161ane\",\n \"nl\": \"Rosj Hasjana\",\n \"sq\": \"Rosh Hashanah\",\n \"sr\": \"\u0420\u043E\u0448 \u0425\u0430\u0448\u0430\u043D\u0430\"\n }\n },\n \"10 Tishrei\": {\n \"name\": {\n \"en\": \"Yom Kippur\",\n \"bs\": \"Jom Kipur\",\n \"de\": \"Jom Kippur\",\n \"hr\": \"Jom Kipur\",\n \"mk\": \"\u0408\u043E\u043C \u041A\u0438\u043F\u0443\u0440\",\n \"nl\": \"Jom Kipoer\",\n \"sq\": \"Yom Kippur\",\n \"sr\": \"\u0408\u043E\u043C \u041A\u0438\u043F\u0443\u0440\"\n }\n },\n \"Deepavali\": {\n \"name\": {\n \"en\": \"Deepavali\",\n \"nl\": \"Divali\"\n }\n },\n \"Vesak\": {\n \"name\": {\n \"en\": \"Vesak Day\",\n \"id\": \"Hari Raya Waisak\"\n }\n },\n \"Holi\": {\n \"name\": {\n \"en\": \"Holi Phagwa\",\n \"nl\": \"Holi-Phagwa\"\n }\n },\n \"Thaipusam\": {\n \"name\": {\n \"en\": \"Thaipusam\",\n \"ms\": \"Hari Thaipusam\"\n }\n },\n \"Abolition of Slavery\": {\n \"name\": {\n \"en\": \"Abolition of Slavery\",\n \"fr\": \"Abolition de l\u2019esclavage\",\n \"nl\": \"Afschaffing van de slavernij\",\n \"vi\": \"B\u00E3i b\u1ECF ch\u1EBF \u0111\u1ED9 N\u00F4 l\u1EC7\"\n }\n },\n \"Bu\u00DF- und Bettag\": {\n \"name\": {\n \"de\": \"Bu\u00DF- und Bettag\",\n \"en\": \"Day of Prayer and Repentance\"\n }\n },\n \"Constitution Day\": {\n \"name\": {\n \"en\": \"Constitution Day\",\n \"da\": \"Grundlovsdag\",\n \"de\": \"Tag der Verfassung\",\n \"ca\": \"Dia de la Constituci\u00F3\",\n \"es\": \"D\u00EDa de la Constituci\u00F3n\",\n \"fil\": \"Araw ng Saligang Batas\",\n \"fo\": \"Grundl\u00F3gardagur\",\n \"hy\": \"\u054D\u0561\u0570\u0574\u0561\u0576\u0561\u0564\u0580\u0578\u0582\u0569\u0575\u0561\u0576 \u0585\u0580\",\n \"jp\": \"\u61B2\u6CD5\u8A18\u5FF5\u65E5\",\n \"ko\": \"\uC81C\uD5CC\uC808\",\n \"nl\": \"Dag van de Grondwet\",\n \"no\": \"Grunnlovsdagen\",\n \"pt\": \"Dia da Constitui\u00E7\u00E3o\",\n \"ro\": \"Ziua Constitu\u021Biei\",\n \"sk\": \"De\u0148 \u00DAstavy\",\n \"sq\": \"Dita e Kushtetut\u00EBs\",\n \"uk\": \"\u0414\u0435\u043D\u044C \u041A\u043E\u043D\u0441\u0442\u0438\u0442\u0443\u0446\u0456\u0457\",\n \"vi\": \"Ng\u00E0y ph\u00E1p lu\u1EADt\"\n }\n },\n \"Fathers Day\": {\n \"name\": {\n \"en\": \"Father's Day\",\n \"et\": \"isadep\u00E4ev\",\n \"fi\": \"Is\u00E4np\u00E4iv\u00E4\",\n \"fr\": \"F\u00EAte des P\u00E8res\",\n \"lt\": \"T\u0117vo diena\",\n \"nl\": \"Vaderdag\",\n \"pt\": \"Dia dos Pais\",\n \"no\": \"Farsdag\",\n \"vi\": \"Ng\u00E0y c\u1EE7a cha\"\n }\n },\n \"Independence Day\": {\n \"name\": {\n \"en\": \"Independence Day\",\n \"ar\": \"\u0639\u064A\u062F \u0627\u0644\u0627\u0633\u062A\u0642\u0644\u0627\u0644\",\n \"be\": \"\u0414\u0437\u0435\u043D\u044C \u041D\u0435\u0437\u0430\u043B\u0435\u0436\u043D\u0430\u0441\u0446i\",\n \"bg\": \"\u0414\u0435\u043D \u043D\u0430 \u043D\u0435\u0437\u0430\u0432\u0438\u0441\u0438\u043C\u043E\u0441\u0442\u0442\u0430\",\n \"bs\": \"Dan nezavisnosti\",\n \"de\": \"Unabh\u00E4ngigkeitstag\",\n \"es\": \"D\u00EDa de la Independencia\",\n \"et\": \"iseseisvusp\u00E4ev\",\n \"fi\": \"Itsen\u00E4isyysp\u00E4iv\u00E4\",\n \"fil\": \"Araw ng Kalayaan\",\n \"fr\": \"Jour de l'Ind\u00E9pendance\",\n \"hr\": \"Dan neovisnosti\",\n \"hy\": \"\u0531\u0576\u056F\u0561\u056D\u0578\u0582\u0569\u0575\u0561\u0576 \u0585\u0580\",\n \"id\": \"Hari Ulang Tahun Kemerdekaan Republik Indonesia\",\n \"mk\": \"\u0414\u0435\u043D \u043D\u0430 \u043D\u0435\u0437\u0430\u0432\u0438\u0441\u043D\u043E\u0441\u0442\u0430\",\n \"ms\": \"Hari Kebangsaan\",\n \"mt\": \"Jum l-Indipendenza\",\n \"nl\": \"Onafhankelijkheidsdag\",\n \"pl\": \"Narodowe \u015Awi\u0119to Niepodleg\u0142o\u015Bci\",\n \"pt\": \"Dia da Independ\u00EAncia\",\n \"ro\": \"Ziua Independentei\",\n \"sq\": \"Dita e Pavar\u00EBsis\u00EB\",\n \"sr\": \"\u0414\u0430\u043D \u043D\u0435\u0437\u0430\u0432\u0438\u0441\u043D\u043E\u0441\u0442\u0438\",\n \"sv\": \"Sj\u00E4lvst\u00E4ndighetsdagen\",\n \"sw\": \"Siku ya uhuru\",\n \"ti\": \"\u1218\u12D3\u120D\u1272 \u1293\u133D\u1290\u1275\",\n \"uk\": \"\u0414\u0435\u043D\u044C \u041D\u0435\u0437\u0430\u043B\u0435\u0436\u043D\u043E\u0441\u0442\u0456\",\n \"vi\": \"Ng\u00E0y \u0110\u1ED9c l\u1EADp\"\n }\n },\n \"Liberation Day\": {\n \"name\": {\n \"en\": \"Liberation Day\",\n \"ar\": \"\u064A\u0648\u0645 \u0627\u0644\u062A\u062D\u0631\u064A\u0631\",\n \"nl\": \"Bevrijdingsdag\",\n \"no\": \"Frigj\u00F8ringsdagen\",\n \"sq\": \"Dita e \u00C7lirimit\",\n \"vi\": \"Ng\u00E0y Th\u1ED1ng nh\u1EA5t\"\n }\n },\n \"Mothers Day\": {\n \"name\": {\n \"en\": \"Mother's Day\",\n \"cz\": \"Den matek\",\n \"da\": \"Mors Dag\",\n \"de\": \"Muttertag\",\n \"el\": \"\u0393\u03B9\u03BF\u03C1\u03C4\u03AE \u03C4\u03B7\u03C2 \u03BC\u03B7\u03C4\u03AD\u03C1\u03B1\u03C2\",\n \"es\": \"D\u00EDa de la Madre\",\n \"et\": \"emadep\u00E4ev\",\n \"fi\": \"\u00C4itienp\u00E4iv\u00E4\",\n \"fr\": \"F\u00EAte des M\u00E8res\",\n \"hr\": \"Maj\u010Din dan\",\n \"hu\": \"Any\u00E1k napja\",\n \"hy\": \"\u0551\u0565\u0572\u0561\u057D\u057A\u0561\u0576\u0578\u0582\u0569\u0575\u0561\u0576 \u0566\u0578\u0570\u0565\u0580\u056B \u0570\u056B\u0577\u0561\u057F\u0561\u056F\u056B \u0585\u0580\",\n \"is\": \"M\u00E6\u00F0radagurinn\",\n \"it\": \"Festa della mamma\",\n \"lt\": \"Motinos diena\",\n \"lv\": \"M\u0101tes diena\",\n \"nl\": \"Moederdag\",\n \"no\": \"Morsdag\",\n \"pt\": \"Dia das M\u00E3es\",\n \"pl\": \"Dzie\u0144 Matki\",\n \"ro\": \"Ziua Mamei\",\n \"sq\": \"Dita e N\u00EBn\u00EBs\",\n \"sv\": \"Mors dag\",\n \"vi\": \"Ng\u00E0y c\u1EE7a m\u1EB9\"\n }\n },\n \"National Holiday\": {\n \"name\": {\n \"en\": \"National Holiday\",\n \"de\": \"Nationalfeiertag\",\n \"es\": \"Fiesta Nacional\",\n \"fr\": \"F\u00EAte nationale\",\n \"hu\": \"Nemzeti \u00FCnnep\",\n \"el\": \"\u03B5\u03B8\u03BD\u03B9\u03BA\u03AE \u03B5\u03C0\u03AD\u03C4\u03B5\u03B9\u03BF\u03C2\",\n \"nl\": \"Nationale feestdag\",\n \"vi\": \"Qu\u1ED1c L\u1EC5\"\n }\n },\n \"Public Holiday\": {\n \"name\": {\n \"en\": \"Public Holiday\",\n \"fr\": \"Jour f\u00E9ri\u00E9 l\u00E9gaux\",\n \"nl\": \"Wettelijke feestdag\",\n \"pt\": \"Feriado Obrigat\u00F3rio\",\n \"vi\": \"Ngh\u1EC9 l\u1EC5 To\u00E0n Qu\u1ED1c\"\n }\n },\n \"Reformation Day\": {\n \"name\": {\n \"en\": \"Reformation Day\",\n \"de\": \"Reformationstag\",\n \"es\": \"D\u00EDa Nacional de las Iglesias Evang\u00E9licas y Protestantes\",\n \"nl\": \"Hervormingsdag\",\n \"vi\": \"Kh\u00E1ng C\u00E1ch\"\n }\n },\n \"Revolution Day\": {\n \"name\": {\n \"en\": \"Revolution Day\",\n \"ar\": \"\u064A\u0648\u0645 \u0627\u0644\u062B\u0648\u0631\u0629\",\n \"es\": \"D\u00EDa de la Revoluci\u00F3n\",\n \"nl\": \"Dag van de revolutie\",\n \"ti\": \"\u1263\u1215\u1272 \u1218\u1235\u12A8\u1228\u121D\",\n \"vi\": \"T\u1ED5ng kh\u1EDFi ngh\u0129a\"\n }\n },\n \"Bridge Day\": {\n \"name\": {\n \"en\": \"Bridge Day\",\n \"es\": \"Feriado Puente Tur\u00EDstico\"\n }\n },\n \"substitutes\": {\n \"name\": {\n \"en\": \"substitute day\",\n \"az\": \"\u0259v\u0259z g\u00FCn\",\n \"bs\": \"zamjena dan\",\n \"de\": \"Ersatztag\",\n \"es\": \"d\u00EDa sustituto\",\n \"fr\": \"jour substitut\",\n \"hr\": \"zamjena dan\",\n \"jp\": \"\u632F\u66FF\u4F11\u65E5\",\n \"lv\": \"aizst\u0101j\u0113js diena\",\n \"mk\": \"\u0437\u0430\u043C\u0435\u043D\u0435\u0442 \u0434\u0435\u043D\",\n \"nl\": \"substituut\",\n \"sq\": \"dit\u00EB z\u00EBvend\u00EBsuese\",\n \"sr\": \"\u0437\u0430\u043C\u0435\u043D\u0430 \u0434\u0430\u043D\",\n \"uk\": \"\u0437\u0430\u043C\u0456\u043D\u0438\u0442\u0438 \u0434\u0435\u043D\u044C\",\n \"vi\": \"ng\u00E0y thay th\u1EBF\",\n \"zh\": \"\u66F4\u6362\u65E5\"\n }\n }\n }\n};\n\nexports.data = data;\n", "'use strict';\n\nObject.defineProperty(exports, '__esModule', { value: true });\n\nvar HolidaysParser = require('date-holidays-parser');\nvar data = require('./data.cjs');\n\nfunction _interopDefaultLegacy (e) { return e && typeof e === 'object' && 'default' in e ? e : { 'default': e }; }\n\nvar HolidaysParser__default = /*#__PURE__*/_interopDefaultLegacy(HolidaysParser);\n\n/**\n * @copyright 2015-present (c) commenthol\n * @license ISC\n */\n\n/**\n * @class\n * @param {String|Object} country - if object use `{ country: {String}, state: {String}, region: {String} }`\n * @param {String} [state] - specifies state\n * @param {String} [region] - specifies region\n * @param {Object} [opts] - options\n * @param {Array|String} opts.languages - set language(s) with ISO 639-1 shortcodes\n * @param {String} opts.timezone - set timezone\n * @param {Array} opts.types - holiday types to consider\n * @example\n * ```js\n * new Holiday('US', 'la', 'no') // is the same as\n * new Holiday('us.la.no') // is the same as\n * new Holiday({ country: 'us', state: 'la', region: 'no'})\n * ```\n */\nclass Holidays extends HolidaysParser__default[\"default\"] {\n constructor (country, state, region, opts) {\n super(data.data, country, state, region, opts);\n }\n}\n\nexports.Holidays = Holidays;\n", "'use strict';\n\nvar Holidays = require('./Holidays.cjs');\n\n\n\nmodule.exports = Holidays.Holidays;\n", "/*!\n * jQuery JavaScript Library v3.6.0\n * https://jquery.com/\n *\n * Includes Sizzle.js\n * https://sizzlejs.com/\n *\n * Copyright OpenJS Foundation and other contributors\n * Released under the MIT license\n * https://jquery.org/license\n *\n * Date: 2021-03-02T17:08Z\n */\n( function( global, factory ) {\n\n\t\"use strict\";\n\n\tif ( typeof module === \"object\" && typeof module.exports === \"object\" ) {\n\n\t\t// For CommonJS and CommonJS-like environments where a proper `window`\n\t\t// is present, execute the factory and get jQuery.\n\t\t// For environments that do not have a `window` with a `document`\n\t\t// (such as Node.js), expose a factory as module.exports.\n\t\t// This accentuates the need for the creation of a real `window`.\n\t\t// e.g. var jQuery = require(\"jquery\")(window);\n\t\t// See ticket #14549 for more info.\n\t\tmodule.exports = global.document ?\n\t\t\tfactory( global, true ) :\n\t\t\tfunction( w ) {\n\t\t\t\tif ( !w.document ) {\n\t\t\t\t\tthrow new Error( \"jQuery requires a window with a document\" );\n\t\t\t\t}\n\t\t\t\treturn factory( w );\n\t\t\t};\n\t} else {\n\t\tfactory( global );\n\t}\n\n// Pass this if window is not defined yet\n} )( typeof window !== \"undefined\" ? window : this, function( window, noGlobal ) {\n\n// Edge <= 12 - 13+, Firefox <=18 - 45+, IE 10 - 11, Safari 5.1 - 9+, iOS 6 - 9.1\n// throw exceptions when non-strict code (e.g., ASP.NET 4.5) accesses strict mode\n// arguments.callee.caller (trac-13335). But as of jQuery 3.0 (2016), strict mode should be common\n// enough that all such attempts are guarded in a try block.\n\"use strict\";\n\nvar arr = [];\n\nvar getProto = Object.getPrototypeOf;\n\nvar slice = arr.slice;\n\nvar flat = arr.flat ? function( array ) {\n\treturn arr.flat.call( array );\n} : function( array ) {\n\treturn arr.concat.apply( [], array );\n};\n\n\nvar push = arr.push;\n\nvar indexOf = arr.indexOf;\n\nvar class2type = {};\n\nvar toString = class2type.toString;\n\nvar hasOwn = class2type.hasOwnProperty;\n\nvar fnToString = hasOwn.toString;\n\nvar ObjectFunctionString = fnToString.call( Object );\n\nvar support = {};\n\nvar isFunction = function isFunction( obj ) {\n\n\t\t// Support: Chrome <=57, Firefox <=52\n\t\t// In some browsers, typeof returns \"function\" for HTML elements\n\t\t// (i.e., `typeof document.createElement( \"object\" ) === \"function\"`).\n\t\t// We don't want to classify *any* DOM node as a function.\n\t\t// Support: QtWeb <=3.8.5, WebKit <=534.34, wkhtmltopdf tool <=0.12.5\n\t\t// Plus for old WebKit, typeof returns \"function\" for HTML collections\n\t\t// (e.g., `typeof document.getElementsByTagName(\"div\") === \"function\"`). (gh-4756)\n\t\treturn typeof obj === \"function\" && typeof obj.nodeType !== \"number\" &&\n\t\t\ttypeof obj.item !== \"function\";\n\t};\n\n\nvar isWindow = function isWindow( obj ) {\n\t\treturn obj != null && obj === obj.window;\n\t};\n\n\nvar document = window.document;\n\n\n\n\tvar preservedScriptAttributes = {\n\t\ttype: true,\n\t\tsrc: true,\n\t\tnonce: true,\n\t\tnoModule: true\n\t};\n\n\tfunction DOMEval( code, node, doc ) {\n\t\tdoc = doc || document;\n\n\t\tvar i, val,\n\t\t\tscript = doc.createElement( \"script\" );\n\n\t\tscript.text = code;\n\t\tif ( node ) {\n\t\t\tfor ( i in preservedScriptAttributes ) {\n\n\t\t\t\t// Support: Firefox 64+, Edge 18+\n\t\t\t\t// Some browsers don't support the \"nonce\" property on scripts.\n\t\t\t\t// On the other hand, just using `getAttribute` is not enough as\n\t\t\t\t// the `nonce` attribute is reset to an empty string whenever it\n\t\t\t\t// becomes browsing-context connected.\n\t\t\t\t// See https://github.com/whatwg/html/issues/2369\n\t\t\t\t// See https://html.spec.whatwg.org/#nonce-attributes\n\t\t\t\t// The `node.getAttribute` check was added for the sake of\n\t\t\t\t// `jQuery.globalEval` so that it can fake a nonce-containing node\n\t\t\t\t// via an object.\n\t\t\t\tval = node[ i ] || node.getAttribute && node.getAttribute( i );\n\t\t\t\tif ( val ) {\n\t\t\t\t\tscript.setAttribute( i, val );\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\tdoc.head.appendChild( script ).parentNode.removeChild( script );\n\t}\n\n\nfunction toType( obj ) {\n\tif ( obj == null ) {\n\t\treturn obj + \"\";\n\t}\n\n\t// Support: Android <=2.3 only (functionish RegExp)\n\treturn typeof obj === \"object\" || typeof obj === \"function\" ?\n\t\tclass2type[ toString.call( obj ) ] || \"object\" :\n\t\ttypeof obj;\n}\n/* global Symbol */\n// Defining this global in .eslintrc.json would create a danger of using the global\n// unguarded in another place, it seems safer to define global only for this module\n\n\n\nvar\n\tversion = \"3.6.0\",\n\n\t// Define a local copy of jQuery\n\tjQuery = function( selector, context ) {\n\n\t\t// The jQuery object is actually just the init constructor 'enhanced'\n\t\t// Need init if jQuery is called (just allow error to be thrown if not included)\n\t\treturn new jQuery.fn.init( selector, context );\n\t};\n\njQuery.fn = jQuery.prototype = {\n\n\t// The current version of jQuery being used\n\tjquery: version,\n\n\tconstructor: jQuery,\n\n\t// The default length of a jQuery object is 0\n\tlength: 0,\n\n\ttoArray: function() {\n\t\treturn slice.call( this );\n\t},\n\n\t// Get the Nth element in the matched element set OR\n\t// Get the whole matched element set as a clean array\n\tget: function( num ) {\n\n\t\t// Return all the elements in a clean array\n\t\tif ( num == null ) {\n\t\t\treturn slice.call( this );\n\t\t}\n\n\t\t// Return just the one element from the set\n\t\treturn num < 0 ? this[ num + this.length ] : this[ num ];\n\t},\n\n\t// Take an array of elements and push it onto the stack\n\t// (returning the new matched element set)\n\tpushStack: function( elems ) {\n\n\t\t// Build a new jQuery matched element set\n\t\tvar ret = jQuery.merge( this.constructor(), elems );\n\n\t\t// Add the old object onto the stack (as a reference)\n\t\tret.prevObject = this;\n\n\t\t// Return the newly-formed element set\n\t\treturn ret;\n\t},\n\n\t// Execute a callback for every element in the matched set.\n\teach: function( callback ) {\n\t\treturn jQuery.each( this, callback );\n\t},\n\n\tmap: function( callback ) {\n\t\treturn this.pushStack( jQuery.map( this, function( elem, i ) {\n\t\t\treturn callback.call( elem, i, elem );\n\t\t} ) );\n\t},\n\n\tslice: function() {\n\t\treturn this.pushStack( slice.apply( this, arguments ) );\n\t},\n\n\tfirst: function() {\n\t\treturn this.eq( 0 );\n\t},\n\n\tlast: function() {\n\t\treturn this.eq( -1 );\n\t},\n\n\teven: function() {\n\t\treturn this.pushStack( jQuery.grep( this, function( _elem, i ) {\n\t\t\treturn ( i + 1 ) % 2;\n\t\t} ) );\n\t},\n\n\todd: function() {\n\t\treturn this.pushStack( jQuery.grep( this, function( _elem, i ) {\n\t\t\treturn i % 2;\n\t\t} ) );\n\t},\n\n\teq: function( i ) {\n\t\tvar len = this.length,\n\t\t\tj = +i + ( i < 0 ? len : 0 );\n\t\treturn this.pushStack( j >= 0 && j < len ? [ this[ j ] ] : [] );\n\t},\n\n\tend: function() {\n\t\treturn this.prevObject || this.constructor();\n\t},\n\n\t// For internal use only.\n\t// Behaves like an Array's method, not like a jQuery method.\n\tpush: push,\n\tsort: arr.sort,\n\tsplice: arr.splice\n};\n\njQuery.extend = jQuery.fn.extend = function() {\n\tvar options, name, src, copy, copyIsArray, clone,\n\t\ttarget = arguments[ 0 ] || {},\n\t\ti = 1,\n\t\tlength = arguments.length,\n\t\tdeep = false;\n\n\t// Handle a deep copy situation\n\tif ( typeof target === \"boolean\" ) {\n\t\tdeep = target;\n\n\t\t// Skip the boolean and the target\n\t\ttarget = arguments[ i ] || {};\n\t\ti++;\n\t}\n\n\t// Handle case when target is a string or something (possible in deep copy)\n\tif ( typeof target !== \"object\" && !isFunction( target ) ) {\n\t\ttarget = {};\n\t}\n\n\t// Extend jQuery itself if only one argument is passed\n\tif ( i === length ) {\n\t\ttarget = this;\n\t\ti--;\n\t}\n\n\tfor ( ; i < length; i++ ) {\n\n\t\t// Only deal with non-null/undefined values\n\t\tif ( ( options = arguments[ i ] ) != null ) {\n\n\t\t\t// Extend the base object\n\t\t\tfor ( name in options ) {\n\t\t\t\tcopy = options[ name ];\n\n\t\t\t\t// Prevent Object.prototype pollution\n\t\t\t\t// Prevent never-ending loop\n\t\t\t\tif ( name === \"__proto__\" || target === copy ) {\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\n\t\t\t\t// Recurse if we're merging plain objects or arrays\n\t\t\t\tif ( deep && copy && ( jQuery.isPlainObject( copy ) ||\n\t\t\t\t\t( copyIsArray = Array.isArray( copy ) ) ) ) {\n\t\t\t\t\tsrc = target[ name ];\n\n\t\t\t\t\t// Ensure proper type for the source value\n\t\t\t\t\tif ( copyIsArray && !Array.isArray( src ) ) {\n\t\t\t\t\t\tclone = [];\n\t\t\t\t\t} else if ( !copyIsArray && !jQuery.isPlainObject( src ) ) {\n\t\t\t\t\t\tclone = {};\n\t\t\t\t\t} else {\n\t\t\t\t\t\tclone = src;\n\t\t\t\t\t}\n\t\t\t\t\tcopyIsArray = false;\n\n\t\t\t\t\t// Never move original objects, clone them\n\t\t\t\t\ttarget[ name ] = jQuery.extend( deep, clone, copy );\n\n\t\t\t\t// Don't bring in undefined values\n\t\t\t\t} else if ( copy !== undefined ) {\n\t\t\t\t\ttarget[ name ] = copy;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\t// Return the modified object\n\treturn target;\n};\n\njQuery.extend( {\n\n\t// Unique for each copy of jQuery on the page\n\texpando: \"jQuery\" + ( version + Math.random() ).replace( /\\D/g, \"\" ),\n\n\t// Assume jQuery is ready without the ready module\n\tisReady: true,\n\n\terror: function( msg ) {\n\t\tthrow new Error( msg );\n\t},\n\n\tnoop: function() {},\n\n\tisPlainObject: function( obj ) {\n\t\tvar proto, Ctor;\n\n\t\t// Detect obvious negatives\n\t\t// Use toString instead of jQuery.type to catch host objects\n\t\tif ( !obj || toString.call( obj ) !== \"[object Object]\" ) {\n\t\t\treturn false;\n\t\t}\n\n\t\tproto = getProto( obj );\n\n\t\t// Objects with no prototype (e.g., `Object.create( null )`) are plain\n\t\tif ( !proto ) {\n\t\t\treturn true;\n\t\t}\n\n\t\t// Objects with prototype are plain iff they were constructed by a global Object function\n\t\tCtor = hasOwn.call( proto, \"constructor\" ) && proto.constructor;\n\t\treturn typeof Ctor === \"function\" && fnToString.call( Ctor ) === ObjectFunctionString;\n\t},\n\n\tisEmptyObject: function( obj ) {\n\t\tvar name;\n\n\t\tfor ( name in obj ) {\n\t\t\treturn false;\n\t\t}\n\t\treturn true;\n\t},\n\n\t// Evaluates a script in a provided context; falls back to the global one\n\t// if not specified.\n\tglobalEval: function( code, options, doc ) {\n\t\tDOMEval( code, { nonce: options && options.nonce }, doc );\n\t},\n\n\teach: function( obj, callback ) {\n\t\tvar length, i = 0;\n\n\t\tif ( isArrayLike( obj ) ) {\n\t\t\tlength = obj.length;\n\t\t\tfor ( ; i < length; i++ ) {\n\t\t\t\tif ( callback.call( obj[ i ], i, obj[ i ] ) === false ) {\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\t\t} else {\n\t\t\tfor ( i in obj ) {\n\t\t\t\tif ( callback.call( obj[ i ], i, obj[ i ] ) === false ) {\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\treturn obj;\n\t},\n\n\t// results is for internal usage only\n\tmakeArray: function( arr, results ) {\n\t\tvar ret = results || [];\n\n\t\tif ( arr != null ) {\n\t\t\tif ( isArrayLike( Object( arr ) ) ) {\n\t\t\t\tjQuery.merge( ret,\n\t\t\t\t\ttypeof arr === \"string\" ?\n\t\t\t\t\t\t[ arr ] : arr\n\t\t\t\t);\n\t\t\t} else {\n\t\t\t\tpush.call( ret, arr );\n\t\t\t}\n\t\t}\n\n\t\treturn ret;\n\t},\n\n\tinArray: function( elem, arr, i ) {\n\t\treturn arr == null ? -1 : indexOf.call( arr, elem, i );\n\t},\n\n\t// Support: Android <=4.0 only, PhantomJS 1 only\n\t// push.apply(_, arraylike) throws on ancient WebKit\n\tmerge: function( first, second ) {\n\t\tvar len = +second.length,\n\t\t\tj = 0,\n\t\t\ti = first.length;\n\n\t\tfor ( ; j < len; j++ ) {\n\t\t\tfirst[ i++ ] = second[ j ];\n\t\t}\n\n\t\tfirst.length = i;\n\n\t\treturn first;\n\t},\n\n\tgrep: function( elems, callback, invert ) {\n\t\tvar callbackInverse,\n\t\t\tmatches = [],\n\t\t\ti = 0,\n\t\t\tlength = elems.length,\n\t\t\tcallbackExpect = !invert;\n\n\t\t// Go through the array, only saving the items\n\t\t// that pass the validator function\n\t\tfor ( ; i < length; i++ ) {\n\t\t\tcallbackInverse = !callback( elems[ i ], i );\n\t\t\tif ( callbackInverse !== callbackExpect ) {\n\t\t\t\tmatches.push( elems[ i ] );\n\t\t\t}\n\t\t}\n\n\t\treturn matches;\n\t},\n\n\t// arg is for internal usage only\n\tmap: function( elems, callback, arg ) {\n\t\tvar length, value,\n\t\t\ti = 0,\n\t\t\tret = [];\n\n\t\t// Go through the array, translating each of the items to their new values\n\t\tif ( isArrayLike( elems ) ) {\n\t\t\tlength = elems.length;\n\t\t\tfor ( ; i < length; i++ ) {\n\t\t\t\tvalue = callback( elems[ i ], i, arg );\n\n\t\t\t\tif ( value != null ) {\n\t\t\t\t\tret.push( value );\n\t\t\t\t}\n\t\t\t}\n\n\t\t// Go through every key on the object,\n\t\t} else {\n\t\t\tfor ( i in elems ) {\n\t\t\t\tvalue = callback( elems[ i ], i, arg );\n\n\t\t\t\tif ( value != null ) {\n\t\t\t\t\tret.push( value );\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\t// Flatten any nested arrays\n\t\treturn flat( ret );\n\t},\n\n\t// A global GUID counter for objects\n\tguid: 1,\n\n\t// jQuery.support is not used in Core but other projects attach their\n\t// properties to it so it needs to exist.\n\tsupport: support\n} );\n\nif ( typeof Symbol === \"function\" ) {\n\tjQuery.fn[ Symbol.iterator ] = arr[ Symbol.iterator ];\n}\n\n// Populate the class2type map\njQuery.each( \"Boolean Number String Function Array Date RegExp Object Error Symbol\".split( \" \" ),\n\tfunction( _i, name ) {\n\t\tclass2type[ \"[object \" + name + \"]\" ] = name.toLowerCase();\n\t} );\n\nfunction isArrayLike( obj ) {\n\n\t// Support: real iOS 8.2 only (not reproducible in simulator)\n\t// `in` check used to prevent JIT error (gh-2145)\n\t// hasOwn isn't used here due to false negatives\n\t// regarding Nodelist length in IE\n\tvar length = !!obj && \"length\" in obj && obj.length,\n\t\ttype = toType( obj );\n\n\tif ( isFunction( obj ) || isWindow( obj ) ) {\n\t\treturn false;\n\t}\n\n\treturn type === \"array\" || length === 0 ||\n\t\ttypeof length === \"number\" && length > 0 && ( length - 1 ) in obj;\n}\nvar Sizzle =\n/*!\n * Sizzle CSS Selector Engine v2.3.6\n * https://sizzlejs.com/\n *\n * Copyright JS Foundation and other contributors\n * Released under the MIT license\n * https://js.foundation/\n *\n * Date: 2021-02-16\n */\n( function( window ) {\nvar i,\n\tsupport,\n\tExpr,\n\tgetText,\n\tisXML,\n\ttokenize,\n\tcompile,\n\tselect,\n\toutermostContext,\n\tsortInput,\n\thasDuplicate,\n\n\t// Local document vars\n\tsetDocument,\n\tdocument,\n\tdocElem,\n\tdocumentIsHTML,\n\trbuggyQSA,\n\trbuggyMatches,\n\tmatches,\n\tcontains,\n\n\t// Instance-specific data\n\texpando = \"sizzle\" + 1 * new Date(),\n\tpreferredDoc = window.document,\n\tdirruns = 0,\n\tdone = 0,\n\tclassCache = createCache(),\n\ttokenCache = createCache(),\n\tcompilerCache = createCache(),\n\tnonnativeSelectorCache = createCache(),\n\tsortOrder = function( a, b ) {\n\t\tif ( a === b ) {\n\t\t\thasDuplicate = true;\n\t\t}\n\t\treturn 0;\n\t},\n\n\t// Instance methods\n\thasOwn = ( {} ).hasOwnProperty,\n\tarr = [],\n\tpop = arr.pop,\n\tpushNative = arr.push,\n\tpush = arr.push,\n\tslice = arr.slice,\n\n\t// Use a stripped-down indexOf as it's faster than native\n\t// https://jsperf.com/thor-indexof-vs-for/5\n\tindexOf = function( list, elem ) {\n\t\tvar i = 0,\n\t\t\tlen = list.length;\n\t\tfor ( ; i < len; i++ ) {\n\t\t\tif ( list[ i ] === elem ) {\n\t\t\t\treturn i;\n\t\t\t}\n\t\t}\n\t\treturn -1;\n\t},\n\n\tbooleans = \"checked|selected|async|autofocus|autoplay|controls|defer|disabled|hidden|\" +\n\t\t\"ismap|loop|multiple|open|readonly|required|scoped\",\n\n\t// Regular expressions\n\n\t// http://www.w3.org/TR/css3-selectors/#whitespace\n\twhitespace = \"[\\\\x20\\\\t\\\\r\\\\n\\\\f]\",\n\n\t// https://www.w3.org/TR/css-syntax-3/#ident-token-diagram\n\tidentifier = \"(?:\\\\\\\\[\\\\da-fA-F]{1,6}\" + whitespace +\n\t\t\"?|\\\\\\\\[^\\\\r\\\\n\\\\f]|[\\\\w-]|[^\\0-\\\\x7f])+\",\n\n\t// Attribute selectors: http://www.w3.org/TR/selectors/#attribute-selectors\n\tattributes = \"\\\\[\" + whitespace + \"*(\" + identifier + \")(?:\" + whitespace +\n\n\t\t// Operator (capture 2)\n\t\t\"*([*^$|!~]?=)\" + whitespace +\n\n\t\t// \"Attribute values must be CSS identifiers [capture 5]\n\t\t// or strings [capture 3 or capture 4]\"\n\t\t\"*(?:'((?:\\\\\\\\.|[^\\\\\\\\'])*)'|\\\"((?:\\\\\\\\.|[^\\\\\\\\\\\"])*)\\\"|(\" + identifier + \"))|)\" +\n\t\twhitespace + \"*\\\\]\",\n\n\tpseudos = \":(\" + identifier + \")(?:\\\\((\" +\n\n\t\t// To reduce the number of selectors needing tokenize in the preFilter, prefer arguments:\n\t\t// 1. quoted (capture 3; capture 4 or capture 5)\n\t\t\"('((?:\\\\\\\\.|[^\\\\\\\\'])*)'|\\\"((?:\\\\\\\\.|[^\\\\\\\\\\\"])*)\\\")|\" +\n\n\t\t// 2. simple (capture 6)\n\t\t\"((?:\\\\\\\\.|[^\\\\\\\\()[\\\\]]|\" + attributes + \")*)|\" +\n\n\t\t// 3. anything else (capture 2)\n\t\t\".*\" +\n\t\t\")\\\\)|)\",\n\n\t// Leading and non-escaped trailing whitespace, capturing some non-whitespace characters preceding the latter\n\trwhitespace = new RegExp( whitespace + \"+\", \"g\" ),\n\trtrim = new RegExp( \"^\" + whitespace + \"+|((?:^|[^\\\\\\\\])(?:\\\\\\\\.)*)\" +\n\t\twhitespace + \"+$\", \"g\" ),\n\n\trcomma = new RegExp( \"^\" + whitespace + \"*,\" + whitespace + \"*\" ),\n\trcombinators = new RegExp( \"^\" + whitespace + \"*([>+~]|\" + whitespace + \")\" + whitespace +\n\t\t\"*\" ),\n\trdescend = new RegExp( whitespace + \"|>\" ),\n\n\trpseudo = new RegExp( pseudos ),\n\tridentifier = new RegExp( \"^\" + identifier + \"$\" ),\n\n\tmatchExpr = {\n\t\t\"ID\": new RegExp( \"^#(\" + identifier + \")\" ),\n\t\t\"CLASS\": new RegExp( \"^\\\\.(\" + identifier + \")\" ),\n\t\t\"TAG\": new RegExp( \"^(\" + identifier + \"|[*])\" ),\n\t\t\"ATTR\": new RegExp( \"^\" + attributes ),\n\t\t\"PSEUDO\": new RegExp( \"^\" + pseudos ),\n\t\t\"CHILD\": new RegExp( \"^:(only|first|last|nth|nth-last)-(child|of-type)(?:\\\\(\" +\n\t\t\twhitespace + \"*(even|odd|(([+-]|)(\\\\d*)n|)\" + whitespace + \"*(?:([+-]|)\" +\n\t\t\twhitespace + \"*(\\\\d+)|))\" + whitespace + \"*\\\\)|)\", \"i\" ),\n\t\t\"bool\": new RegExp( \"^(?:\" + booleans + \")$\", \"i\" ),\n\n\t\t// For use in libraries implementing .is()\n\t\t// We use this for POS matching in `select`\n\t\t\"needsContext\": new RegExp( \"^\" + whitespace +\n\t\t\t\"*[>+~]|:(even|odd|eq|gt|lt|nth|first|last)(?:\\\\(\" + whitespace +\n\t\t\t\"*((?:-\\\\d)?\\\\d*)\" + whitespace + \"*\\\\)|)(?=[^-]|$)\", \"i\" )\n\t},\n\n\trhtml = /HTML$/i,\n\trinputs = /^(?:input|select|textarea|button)$/i,\n\trheader = /^h\\d$/i,\n\n\trnative = /^[^{]+\\{\\s*\\[native \\w/,\n\n\t// Easily-parseable/retrievable ID or TAG or CLASS selectors\n\trquickExpr = /^(?:#([\\w-]+)|(\\w+)|\\.([\\w-]+))$/,\n\n\trsibling = /[+~]/,\n\n\t// CSS escapes\n\t// http://www.w3.org/TR/CSS21/syndata.html#escaped-characters\n\trunescape = new RegExp( \"\\\\\\\\[\\\\da-fA-F]{1,6}\" + whitespace + \"?|\\\\\\\\([^\\\\r\\\\n\\\\f])\", \"g\" ),\n\tfunescape = function( escape, nonHex ) {\n\t\tvar high = \"0x\" + escape.slice( 1 ) - 0x10000;\n\n\t\treturn nonHex ?\n\n\t\t\t// Strip the backslash prefix from a non-hex escape sequence\n\t\t\tnonHex :\n\n\t\t\t// Replace a hexadecimal escape sequence with the encoded Unicode code point\n\t\t\t// Support: IE <=11+\n\t\t\t// For values outside the Basic Multilingual Plane (BMP), manually construct a\n\t\t\t// surrogate pair\n\t\t\thigh < 0 ?\n\t\t\t\tString.fromCharCode( high + 0x10000 ) :\n\t\t\t\tString.fromCharCode( high >> 10 | 0xD800, high & 0x3FF | 0xDC00 );\n\t},\n\n\t// CSS string/identifier serialization\n\t// https://drafts.csswg.org/cssom/#common-serializing-idioms\n\trcssescape = /([\\0-\\x1f\\x7f]|^-?\\d)|^-$|[^\\0-\\x1f\\x7f-\\uFFFF\\w-]/g,\n\tfcssescape = function( ch, asCodePoint ) {\n\t\tif ( asCodePoint ) {\n\n\t\t\t// U+0000 NULL becomes U+FFFD REPLACEMENT CHARACTER\n\t\t\tif ( ch === \"\\0\" ) {\n\t\t\t\treturn \"\\uFFFD\";\n\t\t\t}\n\n\t\t\t// Control characters and (dependent upon position) numbers get escaped as code points\n\t\t\treturn ch.slice( 0, -1 ) + \"\\\\\" +\n\t\t\t\tch.charCodeAt( ch.length - 1 ).toString( 16 ) + \" \";\n\t\t}\n\n\t\t// Other potentially-special ASCII characters get backslash-escaped\n\t\treturn \"\\\\\" + ch;\n\t},\n\n\t// Used for iframes\n\t// See setDocument()\n\t// Removing the function wrapper causes a \"Permission Denied\"\n\t// error in IE\n\tunloadHandler = function() {\n\t\tsetDocument();\n\t},\n\n\tinDisabledFieldset = addCombinator(\n\t\tfunction( elem ) {\n\t\t\treturn elem.disabled === true && elem.nodeName.toLowerCase() === \"fieldset\";\n\t\t},\n\t\t{ dir: \"parentNode\", next: \"legend\" }\n\t);\n\n// Optimize for push.apply( _, NodeList )\ntry {\n\tpush.apply(\n\t\t( arr = slice.call( preferredDoc.childNodes ) ),\n\t\tpreferredDoc.childNodes\n\t);\n\n\t// Support: Android<4.0\n\t// Detect silently failing push.apply\n\t// eslint-disable-next-line no-unused-expressions\n\tarr[ preferredDoc.childNodes.length ].nodeType;\n} catch ( e ) {\n\tpush = { apply: arr.length ?\n\n\t\t// Leverage slice if possible\n\t\tfunction( target, els ) {\n\t\t\tpushNative.apply( target, slice.call( els ) );\n\t\t} :\n\n\t\t// Support: IE<9\n\t\t// Otherwise append directly\n\t\tfunction( target, els ) {\n\t\t\tvar j = target.length,\n\t\t\t\ti = 0;\n\n\t\t\t// Can't trust NodeList.length\n\t\t\twhile ( ( target[ j++ ] = els[ i++ ] ) ) {}\n\t\t\ttarget.length = j - 1;\n\t\t}\n\t};\n}\n\nfunction Sizzle( selector, context, results, seed ) {\n\tvar m, i, elem, nid, match, groups, newSelector,\n\t\tnewContext = context && context.ownerDocument,\n\n\t\t// nodeType defaults to 9, since context defaults to document\n\t\tnodeType = context ? context.nodeType : 9;\n\n\tresults = results || [];\n\n\t// Return early from calls with invalid selector or context\n\tif ( typeof selector !== \"string\" || !selector ||\n\t\tnodeType !== 1 && nodeType !== 9 && nodeType !== 11 ) {\n\n\t\treturn results;\n\t}\n\n\t// Try to shortcut find operations (as opposed to filters) in HTML documents\n\tif ( !seed ) {\n\t\tsetDocument( context );\n\t\tcontext = context || document;\n\n\t\tif ( documentIsHTML ) {\n\n\t\t\t// If the selector is sufficiently simple, try using a \"get*By*\" DOM method\n\t\t\t// (excepting DocumentFragment context, where the methods don't exist)\n\t\t\tif ( nodeType !== 11 && ( match = rquickExpr.exec( selector ) ) ) {\n\n\t\t\t\t// ID selector\n\t\t\t\tif ( ( m = match[ 1 ] ) ) {\n\n\t\t\t\t\t// Document context\n\t\t\t\t\tif ( nodeType === 9 ) {\n\t\t\t\t\t\tif ( ( elem = context.getElementById( m ) ) ) {\n\n\t\t\t\t\t\t\t// Support: IE, Opera, Webkit\n\t\t\t\t\t\t\t// TODO: identify versions\n\t\t\t\t\t\t\t// getElementById can match elements by name instead of ID\n\t\t\t\t\t\t\tif ( elem.id === m ) {\n\t\t\t\t\t\t\t\tresults.push( elem );\n\t\t\t\t\t\t\t\treturn results;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\treturn results;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t// Element context\n\t\t\t\t\t} else {\n\n\t\t\t\t\t\t// Support: IE, Opera, Webkit\n\t\t\t\t\t\t// TODO: identify versions\n\t\t\t\t\t\t// getElementById can match elements by name instead of ID\n\t\t\t\t\t\tif ( newContext && ( elem = newContext.getElementById( m ) ) &&\n\t\t\t\t\t\t\tcontains( context, elem ) &&\n\t\t\t\t\t\t\telem.id === m ) {\n\n\t\t\t\t\t\t\tresults.push( elem );\n\t\t\t\t\t\t\treturn results;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t// Type selector\n\t\t\t\t} else if ( match[ 2 ] ) {\n\t\t\t\t\tpush.apply( results, context.getElementsByTagName( selector ) );\n\t\t\t\t\treturn results;\n\n\t\t\t\t// Class selector\n\t\t\t\t} else if ( ( m = match[ 3 ] ) && support.getElementsByClassName &&\n\t\t\t\t\tcontext.getElementsByClassName ) {\n\n\t\t\t\t\tpush.apply( results, context.getElementsByClassName( m ) );\n\t\t\t\t\treturn results;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Take advantage of querySelectorAll\n\t\t\tif ( support.qsa &&\n\t\t\t\t!nonnativeSelectorCache[ selector + \" \" ] &&\n\t\t\t\t( !rbuggyQSA || !rbuggyQSA.test( selector ) ) &&\n\n\t\t\t\t// Support: IE 8 only\n\t\t\t\t// Exclude object elements\n\t\t\t\t( nodeType !== 1 || context.nodeName.toLowerCase() !== \"object\" ) ) {\n\n\t\t\t\tnewSelector = selector;\n\t\t\t\tnewContext = context;\n\n\t\t\t\t// qSA considers elements outside a scoping root when evaluating child or\n\t\t\t\t// descendant combinators, which is not what we want.\n\t\t\t\t// In such cases, we work around the behavior by prefixing every selector in the\n\t\t\t\t// list with an ID selector referencing the scope context.\n\t\t\t\t// The technique has to be used as well when a leading combinator is used\n\t\t\t\t// as such selectors are not recognized by querySelectorAll.\n\t\t\t\t// Thanks to Andrew Dupont for this technique.\n\t\t\t\tif ( nodeType === 1 &&\n\t\t\t\t\t( rdescend.test( selector ) || rcombinators.test( selector ) ) ) {\n\n\t\t\t\t\t// Expand context for sibling selectors\n\t\t\t\t\tnewContext = rsibling.test( selector ) && testContext( context.parentNode ) ||\n\t\t\t\t\t\tcontext;\n\n\t\t\t\t\t// We can use :scope instead of the ID hack if the browser\n\t\t\t\t\t// supports it & if we're not changing the context.\n\t\t\t\t\tif ( newContext !== context || !support.scope ) {\n\n\t\t\t\t\t\t// Capture the context ID, setting it first if necessary\n\t\t\t\t\t\tif ( ( nid = context.getAttribute( \"id\" ) ) ) {\n\t\t\t\t\t\t\tnid = nid.replace( rcssescape, fcssescape );\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tcontext.setAttribute( \"id\", ( nid = expando ) );\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\t// Prefix every selector in the list\n\t\t\t\t\tgroups = tokenize( selector );\n\t\t\t\t\ti = groups.length;\n\t\t\t\t\twhile ( i-- ) {\n\t\t\t\t\t\tgroups[ i ] = ( nid ? \"#\" + nid : \":scope\" ) + \" \" +\n\t\t\t\t\t\t\ttoSelector( groups[ i ] );\n\t\t\t\t\t}\n\t\t\t\t\tnewSelector = groups.join( \",\" );\n\t\t\t\t}\n\n\t\t\t\ttry {\n\t\t\t\t\tpush.apply( results,\n\t\t\t\t\t\tnewContext.querySelectorAll( newSelector )\n\t\t\t\t\t);\n\t\t\t\t\treturn results;\n\t\t\t\t} catch ( qsaError ) {\n\t\t\t\t\tnonnativeSelectorCache( selector, true );\n\t\t\t\t} finally {\n\t\t\t\t\tif ( nid === expando ) {\n\t\t\t\t\t\tcontext.removeAttribute( \"id\" );\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\t// All others\n\treturn select( selector.replace( rtrim, \"$1\" ), context, results, seed );\n}\n\n/**\n * Create key-value caches of limited size\n * @returns {function(string, object)} Returns the Object data after storing it on itself with\n *\tproperty name the (space-suffixed) string and (if the cache is larger than Expr.cacheLength)\n *\tdeleting the oldest entry\n */\nfunction createCache() {\n\tvar keys = [];\n\n\tfunction cache( key, value ) {\n\n\t\t// Use (key + \" \") to avoid collision with native prototype properties (see Issue #157)\n\t\tif ( keys.push( key + \" \" ) > Expr.cacheLength ) {\n\n\t\t\t// Only keep the most recent entries\n\t\t\tdelete cache[ keys.shift() ];\n\t\t}\n\t\treturn ( cache[ key + \" \" ] = value );\n\t}\n\treturn cache;\n}\n\n/**\n * Mark a function for special use by Sizzle\n * @param {Function} fn The function to mark\n */\nfunction markFunction( fn ) {\n\tfn[ expando ] = true;\n\treturn fn;\n}\n\n/**\n * Support testing using an element\n * @param {Function} fn Passed the created element and returns a boolean result\n */\nfunction assert( fn ) {\n\tvar el = document.createElement( \"fieldset\" );\n\n\ttry {\n\t\treturn !!fn( el );\n\t} catch ( e ) {\n\t\treturn false;\n\t} finally {\n\n\t\t// Remove from its parent by default\n\t\tif ( el.parentNode ) {\n\t\t\tel.parentNode.removeChild( el );\n\t\t}\n\n\t\t// release memory in IE\n\t\tel = null;\n\t}\n}\n\n/**\n * Adds the same handler for all of the specified attrs\n * @param {String} attrs Pipe-separated list of attributes\n * @param {Function} handler The method that will be applied\n */\nfunction addHandle( attrs, handler ) {\n\tvar arr = attrs.split( \"|\" ),\n\t\ti = arr.length;\n\n\twhile ( i-- ) {\n\t\tExpr.attrHandle[ arr[ i ] ] = handler;\n\t}\n}\n\n/**\n * Checks document order of two siblings\n * @param {Element} a\n * @param {Element} b\n * @returns {Number} Returns less than 0 if a precedes b, greater than 0 if a follows b\n */\nfunction siblingCheck( a, b ) {\n\tvar cur = b && a,\n\t\tdiff = cur && a.nodeType === 1 && b.nodeType === 1 &&\n\t\t\ta.sourceIndex - b.sourceIndex;\n\n\t// Use IE sourceIndex if available on both nodes\n\tif ( diff ) {\n\t\treturn diff;\n\t}\n\n\t// Check if b follows a\n\tif ( cur ) {\n\t\twhile ( ( cur = cur.nextSibling ) ) {\n\t\t\tif ( cur === b ) {\n\t\t\t\treturn -1;\n\t\t\t}\n\t\t}\n\t}\n\n\treturn a ? 1 : -1;\n}\n\n/**\n * Returns a function to use in pseudos for input types\n * @param {String} type\n */\nfunction createInputPseudo( type ) {\n\treturn function( elem ) {\n\t\tvar name = elem.nodeName.toLowerCase();\n\t\treturn name === \"input\" && elem.type === type;\n\t};\n}\n\n/**\n * Returns a function to use in pseudos for buttons\n * @param {String} type\n */\nfunction createButtonPseudo( type ) {\n\treturn function( elem ) {\n\t\tvar name = elem.nodeName.toLowerCase();\n\t\treturn ( name === \"input\" || name === \"button\" ) && elem.type === type;\n\t};\n}\n\n/**\n * Returns a function to use in pseudos for :enabled/:disabled\n * @param {Boolean} disabled true for :disabled; false for :enabled\n */\nfunction createDisabledPseudo( disabled ) {\n\n\t// Known :disabled false positives: fieldset[disabled] > legend:nth-of-type(n+2) :can-disable\n\treturn function( elem ) {\n\n\t\t// Only certain elements can match :enabled or :disabled\n\t\t// https://html.spec.whatwg.org/multipage/scripting.html#selector-enabled\n\t\t// https://html.spec.whatwg.org/multipage/scripting.html#selector-disabled\n\t\tif ( \"form\" in elem ) {\n\n\t\t\t// Check for inherited disabledness on relevant non-disabled elements:\n\t\t\t// * listed form-associated elements in a disabled fieldset\n\t\t\t// https://html.spec.whatwg.org/multipage/forms.html#category-listed\n\t\t\t// https://html.spec.whatwg.org/multipage/forms.html#concept-fe-disabled\n\t\t\t// * option elements in a disabled optgroup\n\t\t\t// https://html.spec.whatwg.org/multipage/forms.html#concept-option-disabled\n\t\t\t// All such elements have a \"form\" property.\n\t\t\tif ( elem.parentNode && elem.disabled === false ) {\n\n\t\t\t\t// Option elements defer to a parent optgroup if present\n\t\t\t\tif ( \"label\" in elem ) {\n\t\t\t\t\tif ( \"label\" in elem.parentNode ) {\n\t\t\t\t\t\treturn elem.parentNode.disabled === disabled;\n\t\t\t\t\t} else {\n\t\t\t\t\t\treturn elem.disabled === disabled;\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\t// Support: IE 6 - 11\n\t\t\t\t// Use the isDisabled shortcut property to check for disabled fieldset ancestors\n\t\t\t\treturn elem.isDisabled === disabled ||\n\n\t\t\t\t\t// Where there is no isDisabled, check manually\n\t\t\t\t\t/* jshint -W018 */\n\t\t\t\t\telem.isDisabled !== !disabled &&\n\t\t\t\t\tinDisabledFieldset( elem ) === disabled;\n\t\t\t}\n\n\t\t\treturn elem.disabled === disabled;\n\n\t\t// Try to winnow out elements that can't be disabled before trusting the disabled property.\n\t\t// Some victims get caught in our net (label, legend, menu, track), but it shouldn't\n\t\t// even exist on them, let alone have a boolean value.\n\t\t} else if ( \"label\" in elem ) {\n\t\t\treturn elem.disabled === disabled;\n\t\t}\n\n\t\t// Remaining elements are neither :enabled nor :disabled\n\t\treturn false;\n\t};\n}\n\n/**\n * Returns a function to use in pseudos for positionals\n * @param {Function} fn\n */\nfunction createPositionalPseudo( fn ) {\n\treturn markFunction( function( argument ) {\n\t\targument = +argument;\n\t\treturn markFunction( function( seed, matches ) {\n\t\t\tvar j,\n\t\t\t\tmatchIndexes = fn( [], seed.length, argument ),\n\t\t\t\ti = matchIndexes.length;\n\n\t\t\t// Match elements found at the specified indexes\n\t\t\twhile ( i-- ) {\n\t\t\t\tif ( seed[ ( j = matchIndexes[ i ] ) ] ) {\n\t\t\t\t\tseed[ j ] = !( matches[ j ] = seed[ j ] );\n\t\t\t\t}\n\t\t\t}\n\t\t} );\n\t} );\n}\n\n/**\n * Checks a node for validity as a Sizzle context\n * @param {Element|Object=} context\n * @returns {Element|Object|Boolean} The input node if acceptable, otherwise a falsy value\n */\nfunction testContext( context ) {\n\treturn context && typeof context.getElementsByTagName !== \"undefined\" && context;\n}\n\n// Expose support vars for convenience\nsupport = Sizzle.support = {};\n\n/**\n * Detects XML nodes\n * @param {Element|Object} elem An element or a document\n * @returns {Boolean} True iff elem is a non-HTML XML node\n */\nisXML = Sizzle.isXML = function( elem ) {\n\tvar namespace = elem && elem.namespaceURI,\n\t\tdocElem = elem && ( elem.ownerDocument || elem ).documentElement;\n\n\t// Support: IE <=8\n\t// Assume HTML when documentElement doesn't yet exist, such as inside loading iframes\n\t// https://bugs.jquery.com/ticket/4833\n\treturn !rhtml.test( namespace || docElem && docElem.nodeName || \"HTML\" );\n};\n\n/**\n * Sets document-related variables once based on the current document\n * @param {Element|Object} [doc] An element or document object to use to set the document\n * @returns {Object} Returns the current document\n */\nsetDocument = Sizzle.setDocument = function( node ) {\n\tvar hasCompare, subWindow,\n\t\tdoc = node ? node.ownerDocument || node : preferredDoc;\n\n\t// Return early if doc is invalid or already selected\n\t// Support: IE 11+, Edge 17 - 18+\n\t// IE/Edge sometimes throw a \"Permission denied\" error when strict-comparing\n\t// two documents; shallow comparisons work.\n\t// eslint-disable-next-line eqeqeq\n\tif ( doc == document || doc.nodeType !== 9 || !doc.documentElement ) {\n\t\treturn document;\n\t}\n\n\t// Update global variables\n\tdocument = doc;\n\tdocElem = document.documentElement;\n\tdocumentIsHTML = !isXML( document );\n\n\t// Support: IE 9 - 11+, Edge 12 - 18+\n\t// Accessing iframe documents after unload throws \"permission denied\" errors (jQuery #13936)\n\t// Support: IE 11+, Edge 17 - 18+\n\t// IE/Edge sometimes throw a \"Permission denied\" error when strict-comparing\n\t// two documents; shallow comparisons work.\n\t// eslint-disable-next-line eqeqeq\n\tif ( preferredDoc != document &&\n\t\t( subWindow = document.defaultView ) && subWindow.top !== subWindow ) {\n\n\t\t// Support: IE 11, Edge\n\t\tif ( subWindow.addEventListener ) {\n\t\t\tsubWindow.addEventListener( \"unload\", unloadHandler, false );\n\n\t\t// Support: IE 9 - 10 only\n\t\t} else if ( subWindow.attachEvent ) {\n\t\t\tsubWindow.attachEvent( \"onunload\", unloadHandler );\n\t\t}\n\t}\n\n\t// Support: IE 8 - 11+, Edge 12 - 18+, Chrome <=16 - 25 only, Firefox <=3.6 - 31 only,\n\t// Safari 4 - 5 only, Opera <=11.6 - 12.x only\n\t// IE/Edge & older browsers don't support the :scope pseudo-class.\n\t// Support: Safari 6.0 only\n\t// Safari 6.0 supports :scope but it's an alias of :root there.\n\tsupport.scope = assert( function( el ) {\n\t\tdocElem.appendChild( el ).appendChild( document.createElement( \"div\" ) );\n\t\treturn typeof el.querySelectorAll !== \"undefined\" &&\n\t\t\t!el.querySelectorAll( \":scope fieldset div\" ).length;\n\t} );\n\n\t/* Attributes\n\t---------------------------------------------------------------------- */\n\n\t// Support: IE<8\n\t// Verify that getAttribute really returns attributes and not properties\n\t// (excepting IE8 booleans)\n\tsupport.attributes = assert( function( el ) {\n\t\tel.className = \"i\";\n\t\treturn !el.getAttribute( \"className\" );\n\t} );\n\n\t/* getElement(s)By*\n\t---------------------------------------------------------------------- */\n\n\t// Check if getElementsByTagName(\"*\") returns only elements\n\tsupport.getElementsByTagName = assert( function( el ) {\n\t\tel.appendChild( document.createComment( \"\" ) );\n\t\treturn !el.getElementsByTagName( \"*\" ).length;\n\t} );\n\n\t// Support: IE<9\n\tsupport.getElementsByClassName = rnative.test( document.getElementsByClassName );\n\n\t// Support: IE<10\n\t// Check if getElementById returns elements by name\n\t// The broken getElementById methods don't pick up programmatically-set names,\n\t// so use a roundabout getElementsByName test\n\tsupport.getById = assert( function( el ) {\n\t\tdocElem.appendChild( el ).id = expando;\n\t\treturn !document.getElementsByName || !document.getElementsByName( expando ).length;\n\t} );\n\n\t// ID filter and find\n\tif ( support.getById ) {\n\t\tExpr.filter[ \"ID\" ] = function( id ) {\n\t\t\tvar attrId = id.replace( runescape, funescape );\n\t\t\treturn function( elem ) {\n\t\t\t\treturn elem.getAttribute( \"id\" ) === attrId;\n\t\t\t};\n\t\t};\n\t\tExpr.find[ \"ID\" ] = function( id, context ) {\n\t\t\tif ( typeof context.getElementById !== \"undefined\" && documentIsHTML ) {\n\t\t\t\tvar elem = context.getElementById( id );\n\t\t\t\treturn elem ? [ elem ] : [];\n\t\t\t}\n\t\t};\n\t} else {\n\t\tExpr.filter[ \"ID\" ] = function( id ) {\n\t\t\tvar attrId = id.replace( runescape, funescape );\n\t\t\treturn function( elem ) {\n\t\t\t\tvar node = typeof elem.getAttributeNode !== \"undefined\" &&\n\t\t\t\t\telem.getAttributeNode( \"id\" );\n\t\t\t\treturn node && node.value === attrId;\n\t\t\t};\n\t\t};\n\n\t\t// Support: IE 6 - 7 only\n\t\t// getElementById is not reliable as a find shortcut\n\t\tExpr.find[ \"ID\" ] = function( id, context ) {\n\t\t\tif ( typeof context.getElementById !== \"undefined\" && documentIsHTML ) {\n\t\t\t\tvar node, i, elems,\n\t\t\t\t\telem = context.getElementById( id );\n\n\t\t\t\tif ( elem ) {\n\n\t\t\t\t\t// Verify the id attribute\n\t\t\t\t\tnode = elem.getAttributeNode( \"id\" );\n\t\t\t\t\tif ( node && node.value === id ) {\n\t\t\t\t\t\treturn [ elem ];\n\t\t\t\t\t}\n\n\t\t\t\t\t// Fall back on getElementsByName\n\t\t\t\t\telems = context.getElementsByName( id );\n\t\t\t\t\ti = 0;\n\t\t\t\t\twhile ( ( elem = elems[ i++ ] ) ) {\n\t\t\t\t\t\tnode = elem.getAttributeNode( \"id\" );\n\t\t\t\t\t\tif ( node && node.value === id ) {\n\t\t\t\t\t\t\treturn [ elem ];\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\treturn [];\n\t\t\t}\n\t\t};\n\t}\n\n\t// Tag\n\tExpr.find[ \"TAG\" ] = support.getElementsByTagName ?\n\t\tfunction( tag, context ) {\n\t\t\tif ( typeof context.getElementsByTagName !== \"undefined\" ) {\n\t\t\t\treturn context.getElementsByTagName( tag );\n\n\t\t\t// DocumentFragment nodes don't have gEBTN\n\t\t\t} else if ( support.qsa ) {\n\t\t\t\treturn context.querySelectorAll( tag );\n\t\t\t}\n\t\t} :\n\n\t\tfunction( tag, context ) {\n\t\t\tvar elem,\n\t\t\t\ttmp = [],\n\t\t\t\ti = 0,\n\n\t\t\t\t// By happy coincidence, a (broken) gEBTN appears on DocumentFragment nodes too\n\t\t\t\tresults = context.getElementsByTagName( tag );\n\n\t\t\t// Filter out possible comments\n\t\t\tif ( tag === \"*\" ) {\n\t\t\t\twhile ( ( elem = results[ i++ ] ) ) {\n\t\t\t\t\tif ( elem.nodeType === 1 ) {\n\t\t\t\t\t\ttmp.push( elem );\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\treturn tmp;\n\t\t\t}\n\t\t\treturn results;\n\t\t};\n\n\t// Class\n\tExpr.find[ \"CLASS\" ] = support.getElementsByClassName && function( className, context ) {\n\t\tif ( typeof context.getElementsByClassName !== \"undefined\" && documentIsHTML ) {\n\t\t\treturn context.getElementsByClassName( className );\n\t\t}\n\t};\n\n\t/* QSA/matchesSelector\n\t---------------------------------------------------------------------- */\n\n\t// QSA and matchesSelector support\n\n\t// matchesSelector(:active) reports false when true (IE9/Opera 11.5)\n\trbuggyMatches = [];\n\n\t// qSa(:focus) reports false when true (Chrome 21)\n\t// We allow this because of a bug in IE8/9 that throws an error\n\t// whenever `document.activeElement` is accessed on an iframe\n\t// So, we allow :focus to pass through QSA all the time to avoid the IE error\n\t// See https://bugs.jquery.com/ticket/13378\n\trbuggyQSA = [];\n\n\tif ( ( support.qsa = rnative.test( document.querySelectorAll ) ) ) {\n\n\t\t// Build QSA regex\n\t\t// Regex strategy adopted from Diego Perini\n\t\tassert( function( el ) {\n\n\t\t\tvar input;\n\n\t\t\t// Select is set to empty string on purpose\n\t\t\t// This is to test IE's treatment of not explicitly\n\t\t\t// setting a boolean content attribute,\n\t\t\t// since its presence should be enough\n\t\t\t// https://bugs.jquery.com/ticket/12359\n\t\t\tdocElem.appendChild( el ).innerHTML = \"\" +\n\t\t\t\t\"\";\n\n\t\t\t// Support: IE8, Opera 11-12.16\n\t\t\t// Nothing should be selected when empty strings follow ^= or $= or *=\n\t\t\t// The test attribute must be unknown in Opera but \"safe\" for WinRT\n\t\t\t// https://msdn.microsoft.com/en-us/library/ie/hh465388.aspx#attribute_section\n\t\t\tif ( el.querySelectorAll( \"[msallowcapture^='']\" ).length ) {\n\t\t\t\trbuggyQSA.push( \"[*^$]=\" + whitespace + \"*(?:''|\\\"\\\")\" );\n\t\t\t}\n\n\t\t\t// Support: IE8\n\t\t\t// Boolean attributes and \"value\" are not treated correctly\n\t\t\tif ( !el.querySelectorAll( \"[selected]\" ).length ) {\n\t\t\t\trbuggyQSA.push( \"\\\\[\" + whitespace + \"*(?:value|\" + booleans + \")\" );\n\t\t\t}\n\n\t\t\t// Support: Chrome<29, Android<4.4, Safari<7.0+, iOS<7.0+, PhantomJS<1.9.8+\n\t\t\tif ( !el.querySelectorAll( \"[id~=\" + expando + \"-]\" ).length ) {\n\t\t\t\trbuggyQSA.push( \"~=\" );\n\t\t\t}\n\n\t\t\t// Support: IE 11+, Edge 15 - 18+\n\t\t\t// IE 11/Edge don't find elements on a `[name='']` query in some cases.\n\t\t\t// Adding a temporary attribute to the document before the selection works\n\t\t\t// around the issue.\n\t\t\t// Interestingly, IE 10 & older don't seem to have the issue.\n\t\t\tinput = document.createElement( \"input\" );\n\t\t\tinput.setAttribute( \"name\", \"\" );\n\t\t\tel.appendChild( input );\n\t\t\tif ( !el.querySelectorAll( \"[name='']\" ).length ) {\n\t\t\t\trbuggyQSA.push( \"\\\\[\" + whitespace + \"*name\" + whitespace + \"*=\" +\n\t\t\t\t\twhitespace + \"*(?:''|\\\"\\\")\" );\n\t\t\t}\n\n\t\t\t// Webkit/Opera - :checked should return selected option elements\n\t\t\t// http://www.w3.org/TR/2011/REC-css3-selectors-20110929/#checked\n\t\t\t// IE8 throws error here and will not see later tests\n\t\t\tif ( !el.querySelectorAll( \":checked\" ).length ) {\n\t\t\t\trbuggyQSA.push( \":checked\" );\n\t\t\t}\n\n\t\t\t// Support: Safari 8+, iOS 8+\n\t\t\t// https://bugs.webkit.org/show_bug.cgi?id=136851\n\t\t\t// In-page `selector#id sibling-combinator selector` fails\n\t\t\tif ( !el.querySelectorAll( \"a#\" + expando + \"+*\" ).length ) {\n\t\t\t\trbuggyQSA.push( \".#.+[+~]\" );\n\t\t\t}\n\n\t\t\t// Support: Firefox <=3.6 - 5 only\n\t\t\t// Old Firefox doesn't throw on a badly-escaped identifier.\n\t\t\tel.querySelectorAll( \"\\\\\\f\" );\n\t\t\trbuggyQSA.push( \"[\\\\r\\\\n\\\\f]\" );\n\t\t} );\n\n\t\tassert( function( el ) {\n\t\t\tel.innerHTML = \"\" +\n\t\t\t\t\"\";\n\n\t\t\t// Support: Windows 8 Native Apps\n\t\t\t// The type and name attributes are restricted during .innerHTML assignment\n\t\t\tvar input = document.createElement( \"input\" );\n\t\t\tinput.setAttribute( \"type\", \"hidden\" );\n\t\t\tel.appendChild( input ).setAttribute( \"name\", \"D\" );\n\n\t\t\t// Support: IE8\n\t\t\t// Enforce case-sensitivity of name attribute\n\t\t\tif ( el.querySelectorAll( \"[name=d]\" ).length ) {\n\t\t\t\trbuggyQSA.push( \"name\" + whitespace + \"*[*^$|!~]?=\" );\n\t\t\t}\n\n\t\t\t// FF 3.5 - :enabled/:disabled and hidden elements (hidden elements are still enabled)\n\t\t\t// IE8 throws error here and will not see later tests\n\t\t\tif ( el.querySelectorAll( \":enabled\" ).length !== 2 ) {\n\t\t\t\trbuggyQSA.push( \":enabled\", \":disabled\" );\n\t\t\t}\n\n\t\t\t// Support: IE9-11+\n\t\t\t// IE's :disabled selector does not pick up the children of disabled fieldsets\n\t\t\tdocElem.appendChild( el ).disabled = true;\n\t\t\tif ( el.querySelectorAll( \":disabled\" ).length !== 2 ) {\n\t\t\t\trbuggyQSA.push( \":enabled\", \":disabled\" );\n\t\t\t}\n\n\t\t\t// Support: Opera 10 - 11 only\n\t\t\t// Opera 10-11 does not throw on post-comma invalid pseudos\n\t\t\tel.querySelectorAll( \"*,:x\" );\n\t\t\trbuggyQSA.push( \",.*:\" );\n\t\t} );\n\t}\n\n\tif ( ( support.matchesSelector = rnative.test( ( matches = docElem.matches ||\n\t\tdocElem.webkitMatchesSelector ||\n\t\tdocElem.mozMatchesSelector ||\n\t\tdocElem.oMatchesSelector ||\n\t\tdocElem.msMatchesSelector ) ) ) ) {\n\n\t\tassert( function( el ) {\n\n\t\t\t// Check to see if it's possible to do matchesSelector\n\t\t\t// on a disconnected node (IE 9)\n\t\t\tsupport.disconnectedMatch = matches.call( el, \"*\" );\n\n\t\t\t// This should fail with an exception\n\t\t\t// Gecko does not error, returns false instead\n\t\t\tmatches.call( el, \"[s!='']:x\" );\n\t\t\trbuggyMatches.push( \"!=\", pseudos );\n\t\t} );\n\t}\n\n\trbuggyQSA = rbuggyQSA.length && new RegExp( rbuggyQSA.join( \"|\" ) );\n\trbuggyMatches = rbuggyMatches.length && new RegExp( rbuggyMatches.join( \"|\" ) );\n\n\t/* Contains\n\t---------------------------------------------------------------------- */\n\thasCompare = rnative.test( docElem.compareDocumentPosition );\n\n\t// Element contains another\n\t// Purposefully self-exclusive\n\t// As in, an element does not contain itself\n\tcontains = hasCompare || rnative.test( docElem.contains ) ?\n\t\tfunction( a, b ) {\n\t\t\tvar adown = a.nodeType === 9 ? a.documentElement : a,\n\t\t\t\tbup = b && b.parentNode;\n\t\t\treturn a === bup || !!( bup && bup.nodeType === 1 && (\n\t\t\t\tadown.contains ?\n\t\t\t\t\tadown.contains( bup ) :\n\t\t\t\t\ta.compareDocumentPosition && a.compareDocumentPosition( bup ) & 16\n\t\t\t) );\n\t\t} :\n\t\tfunction( a, b ) {\n\t\t\tif ( b ) {\n\t\t\t\twhile ( ( b = b.parentNode ) ) {\n\t\t\t\t\tif ( b === a ) {\n\t\t\t\t\t\treturn true;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn false;\n\t\t};\n\n\t/* Sorting\n\t---------------------------------------------------------------------- */\n\n\t// Document order sorting\n\tsortOrder = hasCompare ?\n\tfunction( a, b ) {\n\n\t\t// Flag for duplicate removal\n\t\tif ( a === b ) {\n\t\t\thasDuplicate = true;\n\t\t\treturn 0;\n\t\t}\n\n\t\t// Sort on method existence if only one input has compareDocumentPosition\n\t\tvar compare = !a.compareDocumentPosition - !b.compareDocumentPosition;\n\t\tif ( compare ) {\n\t\t\treturn compare;\n\t\t}\n\n\t\t// Calculate position if both inputs belong to the same document\n\t\t// Support: IE 11+, Edge 17 - 18+\n\t\t// IE/Edge sometimes throw a \"Permission denied\" error when strict-comparing\n\t\t// two documents; shallow comparisons work.\n\t\t// eslint-disable-next-line eqeqeq\n\t\tcompare = ( a.ownerDocument || a ) == ( b.ownerDocument || b ) ?\n\t\t\ta.compareDocumentPosition( b ) :\n\n\t\t\t// Otherwise we know they are disconnected\n\t\t\t1;\n\n\t\t// Disconnected nodes\n\t\tif ( compare & 1 ||\n\t\t\t( !support.sortDetached && b.compareDocumentPosition( a ) === compare ) ) {\n\n\t\t\t// Choose the first element that is related to our preferred document\n\t\t\t// Support: IE 11+, Edge 17 - 18+\n\t\t\t// IE/Edge sometimes throw a \"Permission denied\" error when strict-comparing\n\t\t\t// two documents; shallow comparisons work.\n\t\t\t// eslint-disable-next-line eqeqeq\n\t\t\tif ( a == document || a.ownerDocument == preferredDoc &&\n\t\t\t\tcontains( preferredDoc, a ) ) {\n\t\t\t\treturn -1;\n\t\t\t}\n\n\t\t\t// Support: IE 11+, Edge 17 - 18+\n\t\t\t// IE/Edge sometimes throw a \"Permission denied\" error when strict-comparing\n\t\t\t// two documents; shallow comparisons work.\n\t\t\t// eslint-disable-next-line eqeqeq\n\t\t\tif ( b == document || b.ownerDocument == preferredDoc &&\n\t\t\t\tcontains( preferredDoc, b ) ) {\n\t\t\t\treturn 1;\n\t\t\t}\n\n\t\t\t// Maintain original order\n\t\t\treturn sortInput ?\n\t\t\t\t( indexOf( sortInput, a ) - indexOf( sortInput, b ) ) :\n\t\t\t\t0;\n\t\t}\n\n\t\treturn compare & 4 ? -1 : 1;\n\t} :\n\tfunction( a, b ) {\n\n\t\t// Exit early if the nodes are identical\n\t\tif ( a === b ) {\n\t\t\thasDuplicate = true;\n\t\t\treturn 0;\n\t\t}\n\n\t\tvar cur,\n\t\t\ti = 0,\n\t\t\taup = a.parentNode,\n\t\t\tbup = b.parentNode,\n\t\t\tap = [ a ],\n\t\t\tbp = [ b ];\n\n\t\t// Parentless nodes are either documents or disconnected\n\t\tif ( !aup || !bup ) {\n\n\t\t\t// Support: IE 11+, Edge 17 - 18+\n\t\t\t// IE/Edge sometimes throw a \"Permission denied\" error when strict-comparing\n\t\t\t// two documents; shallow comparisons work.\n\t\t\t/* eslint-disable eqeqeq */\n\t\t\treturn a == document ? -1 :\n\t\t\t\tb == document ? 1 :\n\t\t\t\t/* eslint-enable eqeqeq */\n\t\t\t\taup ? -1 :\n\t\t\t\tbup ? 1 :\n\t\t\t\tsortInput ?\n\t\t\t\t( indexOf( sortInput, a ) - indexOf( sortInput, b ) ) :\n\t\t\t\t0;\n\n\t\t// If the nodes are siblings, we can do a quick check\n\t\t} else if ( aup === bup ) {\n\t\t\treturn siblingCheck( a, b );\n\t\t}\n\n\t\t// Otherwise we need full lists of their ancestors for comparison\n\t\tcur = a;\n\t\twhile ( ( cur = cur.parentNode ) ) {\n\t\t\tap.unshift( cur );\n\t\t}\n\t\tcur = b;\n\t\twhile ( ( cur = cur.parentNode ) ) {\n\t\t\tbp.unshift( cur );\n\t\t}\n\n\t\t// Walk down the tree looking for a discrepancy\n\t\twhile ( ap[ i ] === bp[ i ] ) {\n\t\t\ti++;\n\t\t}\n\n\t\treturn i ?\n\n\t\t\t// Do a sibling check if the nodes have a common ancestor\n\t\t\tsiblingCheck( ap[ i ], bp[ i ] ) :\n\n\t\t\t// Otherwise nodes in our document sort first\n\t\t\t// Support: IE 11+, Edge 17 - 18+\n\t\t\t// IE/Edge sometimes throw a \"Permission denied\" error when strict-comparing\n\t\t\t// two documents; shallow comparisons work.\n\t\t\t/* eslint-disable eqeqeq */\n\t\t\tap[ i ] == preferredDoc ? -1 :\n\t\t\tbp[ i ] == preferredDoc ? 1 :\n\t\t\t/* eslint-enable eqeqeq */\n\t\t\t0;\n\t};\n\n\treturn document;\n};\n\nSizzle.matches = function( expr, elements ) {\n\treturn Sizzle( expr, null, null, elements );\n};\n\nSizzle.matchesSelector = function( elem, expr ) {\n\tsetDocument( elem );\n\n\tif ( support.matchesSelector && documentIsHTML &&\n\t\t!nonnativeSelectorCache[ expr + \" \" ] &&\n\t\t( !rbuggyMatches || !rbuggyMatches.test( expr ) ) &&\n\t\t( !rbuggyQSA || !rbuggyQSA.test( expr ) ) ) {\n\n\t\ttry {\n\t\t\tvar ret = matches.call( elem, expr );\n\n\t\t\t// IE 9's matchesSelector returns false on disconnected nodes\n\t\t\tif ( ret || support.disconnectedMatch ||\n\n\t\t\t\t// As well, disconnected nodes are said to be in a document\n\t\t\t\t// fragment in IE 9\n\t\t\t\telem.document && elem.document.nodeType !== 11 ) {\n\t\t\t\treturn ret;\n\t\t\t}\n\t\t} catch ( e ) {\n\t\t\tnonnativeSelectorCache( expr, true );\n\t\t}\n\t}\n\n\treturn Sizzle( expr, document, null, [ elem ] ).length > 0;\n};\n\nSizzle.contains = function( context, elem ) {\n\n\t// Set document vars if needed\n\t// Support: IE 11+, Edge 17 - 18+\n\t// IE/Edge sometimes throw a \"Permission denied\" error when strict-comparing\n\t// two documents; shallow comparisons work.\n\t// eslint-disable-next-line eqeqeq\n\tif ( ( context.ownerDocument || context ) != document ) {\n\t\tsetDocument( context );\n\t}\n\treturn contains( context, elem );\n};\n\nSizzle.attr = function( elem, name ) {\n\n\t// Set document vars if needed\n\t// Support: IE 11+, Edge 17 - 18+\n\t// IE/Edge sometimes throw a \"Permission denied\" error when strict-comparing\n\t// two documents; shallow comparisons work.\n\t// eslint-disable-next-line eqeqeq\n\tif ( ( elem.ownerDocument || elem ) != document ) {\n\t\tsetDocument( elem );\n\t}\n\n\tvar fn = Expr.attrHandle[ name.toLowerCase() ],\n\n\t\t// Don't get fooled by Object.prototype properties (jQuery #13807)\n\t\tval = fn && hasOwn.call( Expr.attrHandle, name.toLowerCase() ) ?\n\t\t\tfn( elem, name, !documentIsHTML ) :\n\t\t\tundefined;\n\n\treturn val !== undefined ?\n\t\tval :\n\t\tsupport.attributes || !documentIsHTML ?\n\t\t\telem.getAttribute( name ) :\n\t\t\t( val = elem.getAttributeNode( name ) ) && val.specified ?\n\t\t\t\tval.value :\n\t\t\t\tnull;\n};\n\nSizzle.escape = function( sel ) {\n\treturn ( sel + \"\" ).replace( rcssescape, fcssescape );\n};\n\nSizzle.error = function( msg ) {\n\tthrow new Error( \"Syntax error, unrecognized expression: \" + msg );\n};\n\n/**\n * Document sorting and removing duplicates\n * @param {ArrayLike} results\n */\nSizzle.uniqueSort = function( results ) {\n\tvar elem,\n\t\tduplicates = [],\n\t\tj = 0,\n\t\ti = 0;\n\n\t// Unless we *know* we can detect duplicates, assume their presence\n\thasDuplicate = !support.detectDuplicates;\n\tsortInput = !support.sortStable && results.slice( 0 );\n\tresults.sort( sortOrder );\n\n\tif ( hasDuplicate ) {\n\t\twhile ( ( elem = results[ i++ ] ) ) {\n\t\t\tif ( elem === results[ i ] ) {\n\t\t\t\tj = duplicates.push( i );\n\t\t\t}\n\t\t}\n\t\twhile ( j-- ) {\n\t\t\tresults.splice( duplicates[ j ], 1 );\n\t\t}\n\t}\n\n\t// Clear input after sorting to release objects\n\t// See https://github.com/jquery/sizzle/pull/225\n\tsortInput = null;\n\n\treturn results;\n};\n\n/**\n * Utility function for retrieving the text value of an array of DOM nodes\n * @param {Array|Element} elem\n */\ngetText = Sizzle.getText = function( elem ) {\n\tvar node,\n\t\tret = \"\",\n\t\ti = 0,\n\t\tnodeType = elem.nodeType;\n\n\tif ( !nodeType ) {\n\n\t\t// If no nodeType, this is expected to be an array\n\t\twhile ( ( node = elem[ i++ ] ) ) {\n\n\t\t\t// Do not traverse comment nodes\n\t\t\tret += getText( node );\n\t\t}\n\t} else if ( nodeType === 1 || nodeType === 9 || nodeType === 11 ) {\n\n\t\t// Use textContent for elements\n\t\t// innerText usage removed for consistency of new lines (jQuery #11153)\n\t\tif ( typeof elem.textContent === \"string\" ) {\n\t\t\treturn elem.textContent;\n\t\t} else {\n\n\t\t\t// Traverse its children\n\t\t\tfor ( elem = elem.firstChild; elem; elem = elem.nextSibling ) {\n\t\t\t\tret += getText( elem );\n\t\t\t}\n\t\t}\n\t} else if ( nodeType === 3 || nodeType === 4 ) {\n\t\treturn elem.nodeValue;\n\t}\n\n\t// Do not include comment or processing instruction nodes\n\n\treturn ret;\n};\n\nExpr = Sizzle.selectors = {\n\n\t// Can be adjusted by the user\n\tcacheLength: 50,\n\n\tcreatePseudo: markFunction,\n\n\tmatch: matchExpr,\n\n\tattrHandle: {},\n\n\tfind: {},\n\n\trelative: {\n\t\t\">\": { dir: \"parentNode\", first: true },\n\t\t\" \": { dir: \"parentNode\" },\n\t\t\"+\": { dir: \"previousSibling\", first: true },\n\t\t\"~\": { dir: \"previousSibling\" }\n\t},\n\n\tpreFilter: {\n\t\t\"ATTR\": function( match ) {\n\t\t\tmatch[ 1 ] = match[ 1 ].replace( runescape, funescape );\n\n\t\t\t// Move the given value to match[3] whether quoted or unquoted\n\t\t\tmatch[ 3 ] = ( match[ 3 ] || match[ 4 ] ||\n\t\t\t\tmatch[ 5 ] || \"\" ).replace( runescape, funescape );\n\n\t\t\tif ( match[ 2 ] === \"~=\" ) {\n\t\t\t\tmatch[ 3 ] = \" \" + match[ 3 ] + \" \";\n\t\t\t}\n\n\t\t\treturn match.slice( 0, 4 );\n\t\t},\n\n\t\t\"CHILD\": function( match ) {\n\n\t\t\t/* matches from matchExpr[\"CHILD\"]\n\t\t\t\t1 type (only|nth|...)\n\t\t\t\t2 what (child|of-type)\n\t\t\t\t3 argument (even|odd|\\d*|\\d*n([+-]\\d+)?|...)\n\t\t\t\t4 xn-component of xn+y argument ([+-]?\\d*n|)\n\t\t\t\t5 sign of xn-component\n\t\t\t\t6 x of xn-component\n\t\t\t\t7 sign of y-component\n\t\t\t\t8 y of y-component\n\t\t\t*/\n\t\t\tmatch[ 1 ] = match[ 1 ].toLowerCase();\n\n\t\t\tif ( match[ 1 ].slice( 0, 3 ) === \"nth\" ) {\n\n\t\t\t\t// nth-* requires argument\n\t\t\t\tif ( !match[ 3 ] ) {\n\t\t\t\t\tSizzle.error( match[ 0 ] );\n\t\t\t\t}\n\n\t\t\t\t// numeric x and y parameters for Expr.filter.CHILD\n\t\t\t\t// remember that false/true cast respectively to 0/1\n\t\t\t\tmatch[ 4 ] = +( match[ 4 ] ?\n\t\t\t\t\tmatch[ 5 ] + ( match[ 6 ] || 1 ) :\n\t\t\t\t\t2 * ( match[ 3 ] === \"even\" || match[ 3 ] === \"odd\" ) );\n\t\t\t\tmatch[ 5 ] = +( ( match[ 7 ] + match[ 8 ] ) || match[ 3 ] === \"odd\" );\n\n\t\t\t\t// other types prohibit arguments\n\t\t\t} else if ( match[ 3 ] ) {\n\t\t\t\tSizzle.error( match[ 0 ] );\n\t\t\t}\n\n\t\t\treturn match;\n\t\t},\n\n\t\t\"PSEUDO\": function( match ) {\n\t\t\tvar excess,\n\t\t\t\tunquoted = !match[ 6 ] && match[ 2 ];\n\n\t\t\tif ( matchExpr[ \"CHILD\" ].test( match[ 0 ] ) ) {\n\t\t\t\treturn null;\n\t\t\t}\n\n\t\t\t// Accept quoted arguments as-is\n\t\t\tif ( match[ 3 ] ) {\n\t\t\t\tmatch[ 2 ] = match[ 4 ] || match[ 5 ] || \"\";\n\n\t\t\t// Strip excess characters from unquoted arguments\n\t\t\t} else if ( unquoted && rpseudo.test( unquoted ) &&\n\n\t\t\t\t// Get excess from tokenize (recursively)\n\t\t\t\t( excess = tokenize( unquoted, true ) ) &&\n\n\t\t\t\t// advance to the next closing parenthesis\n\t\t\t\t( excess = unquoted.indexOf( \")\", unquoted.length - excess ) - unquoted.length ) ) {\n\n\t\t\t\t// excess is a negative index\n\t\t\t\tmatch[ 0 ] = match[ 0 ].slice( 0, excess );\n\t\t\t\tmatch[ 2 ] = unquoted.slice( 0, excess );\n\t\t\t}\n\n\t\t\t// Return only captures needed by the pseudo filter method (type and argument)\n\t\t\treturn match.slice( 0, 3 );\n\t\t}\n\t},\n\n\tfilter: {\n\n\t\t\"TAG\": function( nodeNameSelector ) {\n\t\t\tvar nodeName = nodeNameSelector.replace( runescape, funescape ).toLowerCase();\n\t\t\treturn nodeNameSelector === \"*\" ?\n\t\t\t\tfunction() {\n\t\t\t\t\treturn true;\n\t\t\t\t} :\n\t\t\t\tfunction( elem ) {\n\t\t\t\t\treturn elem.nodeName && elem.nodeName.toLowerCase() === nodeName;\n\t\t\t\t};\n\t\t},\n\n\t\t\"CLASS\": function( className ) {\n\t\t\tvar pattern = classCache[ className + \" \" ];\n\n\t\t\treturn pattern ||\n\t\t\t\t( pattern = new RegExp( \"(^|\" + whitespace +\n\t\t\t\t\t\")\" + className + \"(\" + whitespace + \"|$)\" ) ) && classCache(\n\t\t\t\t\t\tclassName, function( elem ) {\n\t\t\t\t\t\t\treturn pattern.test(\n\t\t\t\t\t\t\t\ttypeof elem.className === \"string\" && elem.className ||\n\t\t\t\t\t\t\t\ttypeof elem.getAttribute !== \"undefined\" &&\n\t\t\t\t\t\t\t\t\telem.getAttribute( \"class\" ) ||\n\t\t\t\t\t\t\t\t\"\"\n\t\t\t\t\t\t\t);\n\t\t\t\t} );\n\t\t},\n\n\t\t\"ATTR\": function( name, operator, check ) {\n\t\t\treturn function( elem ) {\n\t\t\t\tvar result = Sizzle.attr( elem, name );\n\n\t\t\t\tif ( result == null ) {\n\t\t\t\t\treturn operator === \"!=\";\n\t\t\t\t}\n\t\t\t\tif ( !operator ) {\n\t\t\t\t\treturn true;\n\t\t\t\t}\n\n\t\t\t\tresult += \"\";\n\n\t\t\t\t/* eslint-disable max-len */\n\n\t\t\t\treturn operator === \"=\" ? result === check :\n\t\t\t\t\toperator === \"!=\" ? result !== check :\n\t\t\t\t\toperator === \"^=\" ? check && result.indexOf( check ) === 0 :\n\t\t\t\t\toperator === \"*=\" ? check && result.indexOf( check ) > -1 :\n\t\t\t\t\toperator === \"$=\" ? check && result.slice( -check.length ) === check :\n\t\t\t\t\toperator === \"~=\" ? ( \" \" + result.replace( rwhitespace, \" \" ) + \" \" ).indexOf( check ) > -1 :\n\t\t\t\t\toperator === \"|=\" ? result === check || result.slice( 0, check.length + 1 ) === check + \"-\" :\n\t\t\t\t\tfalse;\n\t\t\t\t/* eslint-enable max-len */\n\n\t\t\t};\n\t\t},\n\n\t\t\"CHILD\": function( type, what, _argument, first, last ) {\n\t\t\tvar simple = type.slice( 0, 3 ) !== \"nth\",\n\t\t\t\tforward = type.slice( -4 ) !== \"last\",\n\t\t\t\tofType = what === \"of-type\";\n\n\t\t\treturn first === 1 && last === 0 ?\n\n\t\t\t\t// Shortcut for :nth-*(n)\n\t\t\t\tfunction( elem ) {\n\t\t\t\t\treturn !!elem.parentNode;\n\t\t\t\t} :\n\n\t\t\t\tfunction( elem, _context, xml ) {\n\t\t\t\t\tvar cache, uniqueCache, outerCache, node, nodeIndex, start,\n\t\t\t\t\t\tdir = simple !== forward ? \"nextSibling\" : \"previousSibling\",\n\t\t\t\t\t\tparent = elem.parentNode,\n\t\t\t\t\t\tname = ofType && elem.nodeName.toLowerCase(),\n\t\t\t\t\t\tuseCache = !xml && !ofType,\n\t\t\t\t\t\tdiff = false;\n\n\t\t\t\t\tif ( parent ) {\n\n\t\t\t\t\t\t// :(first|last|only)-(child|of-type)\n\t\t\t\t\t\tif ( simple ) {\n\t\t\t\t\t\t\twhile ( dir ) {\n\t\t\t\t\t\t\t\tnode = elem;\n\t\t\t\t\t\t\t\twhile ( ( node = node[ dir ] ) ) {\n\t\t\t\t\t\t\t\t\tif ( ofType ?\n\t\t\t\t\t\t\t\t\t\tnode.nodeName.toLowerCase() === name :\n\t\t\t\t\t\t\t\t\t\tnode.nodeType === 1 ) {\n\n\t\t\t\t\t\t\t\t\t\treturn false;\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t// Reverse direction for :only-* (if we haven't yet done so)\n\t\t\t\t\t\t\t\tstart = dir = type === \"only\" && !start && \"nextSibling\";\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\treturn true;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tstart = [ forward ? parent.firstChild : parent.lastChild ];\n\n\t\t\t\t\t\t// non-xml :nth-child(...) stores cache data on `parent`\n\t\t\t\t\t\tif ( forward && useCache ) {\n\n\t\t\t\t\t\t\t// Seek `elem` from a previously-cached index\n\n\t\t\t\t\t\t\t// ...in a gzip-friendly way\n\t\t\t\t\t\t\tnode = parent;\n\t\t\t\t\t\t\touterCache = node[ expando ] || ( node[ expando ] = {} );\n\n\t\t\t\t\t\t\t// Support: IE <9 only\n\t\t\t\t\t\t\t// Defend against cloned attroperties (jQuery gh-1709)\n\t\t\t\t\t\t\tuniqueCache = outerCache[ node.uniqueID ] ||\n\t\t\t\t\t\t\t\t( outerCache[ node.uniqueID ] = {} );\n\n\t\t\t\t\t\t\tcache = uniqueCache[ type ] || [];\n\t\t\t\t\t\t\tnodeIndex = cache[ 0 ] === dirruns && cache[ 1 ];\n\t\t\t\t\t\t\tdiff = nodeIndex && cache[ 2 ];\n\t\t\t\t\t\t\tnode = nodeIndex && parent.childNodes[ nodeIndex ];\n\n\t\t\t\t\t\t\twhile ( ( node = ++nodeIndex && node && node[ dir ] ||\n\n\t\t\t\t\t\t\t\t// Fallback to seeking `elem` from the start\n\t\t\t\t\t\t\t\t( diff = nodeIndex = 0 ) || start.pop() ) ) {\n\n\t\t\t\t\t\t\t\t// When found, cache indexes on `parent` and break\n\t\t\t\t\t\t\t\tif ( node.nodeType === 1 && ++diff && node === elem ) {\n\t\t\t\t\t\t\t\t\tuniqueCache[ type ] = [ dirruns, nodeIndex, diff ];\n\t\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t} else {\n\n\t\t\t\t\t\t\t// Use previously-cached element index if available\n\t\t\t\t\t\t\tif ( useCache ) {\n\n\t\t\t\t\t\t\t\t// ...in a gzip-friendly way\n\t\t\t\t\t\t\t\tnode = elem;\n\t\t\t\t\t\t\t\touterCache = node[ expando ] || ( node[ expando ] = {} );\n\n\t\t\t\t\t\t\t\t// Support: IE <9 only\n\t\t\t\t\t\t\t\t// Defend against cloned attroperties (jQuery gh-1709)\n\t\t\t\t\t\t\t\tuniqueCache = outerCache[ node.uniqueID ] ||\n\t\t\t\t\t\t\t\t\t( outerCache[ node.uniqueID ] = {} );\n\n\t\t\t\t\t\t\t\tcache = uniqueCache[ type ] || [];\n\t\t\t\t\t\t\t\tnodeIndex = cache[ 0 ] === dirruns && cache[ 1 ];\n\t\t\t\t\t\t\t\tdiff = nodeIndex;\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t// xml :nth-child(...)\n\t\t\t\t\t\t\t// or :nth-last-child(...) or :nth(-last)?-of-type(...)\n\t\t\t\t\t\t\tif ( diff === false ) {\n\n\t\t\t\t\t\t\t\t// Use the same loop as above to seek `elem` from the start\n\t\t\t\t\t\t\t\twhile ( ( node = ++nodeIndex && node && node[ dir ] ||\n\t\t\t\t\t\t\t\t\t( diff = nodeIndex = 0 ) || start.pop() ) ) {\n\n\t\t\t\t\t\t\t\t\tif ( ( ofType ?\n\t\t\t\t\t\t\t\t\t\tnode.nodeName.toLowerCase() === name :\n\t\t\t\t\t\t\t\t\t\tnode.nodeType === 1 ) &&\n\t\t\t\t\t\t\t\t\t\t++diff ) {\n\n\t\t\t\t\t\t\t\t\t\t// Cache the index of each encountered element\n\t\t\t\t\t\t\t\t\t\tif ( useCache ) {\n\t\t\t\t\t\t\t\t\t\t\touterCache = node[ expando ] ||\n\t\t\t\t\t\t\t\t\t\t\t\t( node[ expando ] = {} );\n\n\t\t\t\t\t\t\t\t\t\t\t// Support: IE <9 only\n\t\t\t\t\t\t\t\t\t\t\t// Defend against cloned attroperties (jQuery gh-1709)\n\t\t\t\t\t\t\t\t\t\t\tuniqueCache = outerCache[ node.uniqueID ] ||\n\t\t\t\t\t\t\t\t\t\t\t\t( outerCache[ node.uniqueID ] = {} );\n\n\t\t\t\t\t\t\t\t\t\t\tuniqueCache[ type ] = [ dirruns, diff ];\n\t\t\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t\t\tif ( node === elem ) {\n\t\t\t\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t// Incorporate the offset, then check against cycle size\n\t\t\t\t\t\tdiff -= last;\n\t\t\t\t\t\treturn diff === first || ( diff % first === 0 && diff / first >= 0 );\n\t\t\t\t\t}\n\t\t\t\t};\n\t\t},\n\n\t\t\"PSEUDO\": function( pseudo, argument ) {\n\n\t\t\t// pseudo-class names are case-insensitive\n\t\t\t// http://www.w3.org/TR/selectors/#pseudo-classes\n\t\t\t// Prioritize by case sensitivity in case custom pseudos are added with uppercase letters\n\t\t\t// Remember that setFilters inherits from pseudos\n\t\t\tvar args,\n\t\t\t\tfn = Expr.pseudos[ pseudo ] || Expr.setFilters[ pseudo.toLowerCase() ] ||\n\t\t\t\t\tSizzle.error( \"unsupported pseudo: \" + pseudo );\n\n\t\t\t// The user may use createPseudo to indicate that\n\t\t\t// arguments are needed to create the filter function\n\t\t\t// just as Sizzle does\n\t\t\tif ( fn[ expando ] ) {\n\t\t\t\treturn fn( argument );\n\t\t\t}\n\n\t\t\t// But maintain support for old signatures\n\t\t\tif ( fn.length > 1 ) {\n\t\t\t\targs = [ pseudo, pseudo, \"\", argument ];\n\t\t\t\treturn Expr.setFilters.hasOwnProperty( pseudo.toLowerCase() ) ?\n\t\t\t\t\tmarkFunction( function( seed, matches ) {\n\t\t\t\t\t\tvar idx,\n\t\t\t\t\t\t\tmatched = fn( seed, argument ),\n\t\t\t\t\t\t\ti = matched.length;\n\t\t\t\t\t\twhile ( i-- ) {\n\t\t\t\t\t\t\tidx = indexOf( seed, matched[ i ] );\n\t\t\t\t\t\t\tseed[ idx ] = !( matches[ idx ] = matched[ i ] );\n\t\t\t\t\t\t}\n\t\t\t\t\t} ) :\n\t\t\t\t\tfunction( elem ) {\n\t\t\t\t\t\treturn fn( elem, 0, args );\n\t\t\t\t\t};\n\t\t\t}\n\n\t\t\treturn fn;\n\t\t}\n\t},\n\n\tpseudos: {\n\n\t\t// Potentially complex pseudos\n\t\t\"not\": markFunction( function( selector ) {\n\n\t\t\t// Trim the selector passed to compile\n\t\t\t// to avoid treating leading and trailing\n\t\t\t// spaces as combinators\n\t\t\tvar input = [],\n\t\t\t\tresults = [],\n\t\t\t\tmatcher = compile( selector.replace( rtrim, \"$1\" ) );\n\n\t\t\treturn matcher[ expando ] ?\n\t\t\t\tmarkFunction( function( seed, matches, _context, xml ) {\n\t\t\t\t\tvar elem,\n\t\t\t\t\t\tunmatched = matcher( seed, null, xml, [] ),\n\t\t\t\t\t\ti = seed.length;\n\n\t\t\t\t\t// Match elements unmatched by `matcher`\n\t\t\t\t\twhile ( i-- ) {\n\t\t\t\t\t\tif ( ( elem = unmatched[ i ] ) ) {\n\t\t\t\t\t\t\tseed[ i ] = !( matches[ i ] = elem );\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t} ) :\n\t\t\t\tfunction( elem, _context, xml ) {\n\t\t\t\t\tinput[ 0 ] = elem;\n\t\t\t\t\tmatcher( input, null, xml, results );\n\n\t\t\t\t\t// Don't keep the element (issue #299)\n\t\t\t\t\tinput[ 0 ] = null;\n\t\t\t\t\treturn !results.pop();\n\t\t\t\t};\n\t\t} ),\n\n\t\t\"has\": markFunction( function( selector ) {\n\t\t\treturn function( elem ) {\n\t\t\t\treturn Sizzle( selector, elem ).length > 0;\n\t\t\t};\n\t\t} ),\n\n\t\t\"contains\": markFunction( function( text ) {\n\t\t\ttext = text.replace( runescape, funescape );\n\t\t\treturn function( elem ) {\n\t\t\t\treturn ( elem.textContent || getText( elem ) ).indexOf( text ) > -1;\n\t\t\t};\n\t\t} ),\n\n\t\t// \"Whether an element is represented by a :lang() selector\n\t\t// is based solely on the element's language value\n\t\t// being equal to the identifier C,\n\t\t// or beginning with the identifier C immediately followed by \"-\".\n\t\t// The matching of C against the element's language value is performed case-insensitively.\n\t\t// The identifier C does not have to be a valid language name.\"\n\t\t// http://www.w3.org/TR/selectors/#lang-pseudo\n\t\t\"lang\": markFunction( function( lang ) {\n\n\t\t\t// lang value must be a valid identifier\n\t\t\tif ( !ridentifier.test( lang || \"\" ) ) {\n\t\t\t\tSizzle.error( \"unsupported lang: \" + lang );\n\t\t\t}\n\t\t\tlang = lang.replace( runescape, funescape ).toLowerCase();\n\t\t\treturn function( elem ) {\n\t\t\t\tvar elemLang;\n\t\t\t\tdo {\n\t\t\t\t\tif ( ( elemLang = documentIsHTML ?\n\t\t\t\t\t\telem.lang :\n\t\t\t\t\t\telem.getAttribute( \"xml:lang\" ) || elem.getAttribute( \"lang\" ) ) ) {\n\n\t\t\t\t\t\telemLang = elemLang.toLowerCase();\n\t\t\t\t\t\treturn elemLang === lang || elemLang.indexOf( lang + \"-\" ) === 0;\n\t\t\t\t\t}\n\t\t\t\t} while ( ( elem = elem.parentNode ) && elem.nodeType === 1 );\n\t\t\t\treturn false;\n\t\t\t};\n\t\t} ),\n\n\t\t// Miscellaneous\n\t\t\"target\": function( elem ) {\n\t\t\tvar hash = window.location && window.location.hash;\n\t\t\treturn hash && hash.slice( 1 ) === elem.id;\n\t\t},\n\n\t\t\"root\": function( elem ) {\n\t\t\treturn elem === docElem;\n\t\t},\n\n\t\t\"focus\": function( elem ) {\n\t\t\treturn elem === document.activeElement &&\n\t\t\t\t( !document.hasFocus || document.hasFocus() ) &&\n\t\t\t\t!!( elem.type || elem.href || ~elem.tabIndex );\n\t\t},\n\n\t\t// Boolean properties\n\t\t\"enabled\": createDisabledPseudo( false ),\n\t\t\"disabled\": createDisabledPseudo( true ),\n\n\t\t\"checked\": function( elem ) {\n\n\t\t\t// In CSS3, :checked should return both checked and selected elements\n\t\t\t// http://www.w3.org/TR/2011/REC-css3-selectors-20110929/#checked\n\t\t\tvar nodeName = elem.nodeName.toLowerCase();\n\t\t\treturn ( nodeName === \"input\" && !!elem.checked ) ||\n\t\t\t\t( nodeName === \"option\" && !!elem.selected );\n\t\t},\n\n\t\t\"selected\": function( elem ) {\n\n\t\t\t// Accessing this property makes selected-by-default\n\t\t\t// options in Safari work properly\n\t\t\tif ( elem.parentNode ) {\n\t\t\t\t// eslint-disable-next-line no-unused-expressions\n\t\t\t\telem.parentNode.selectedIndex;\n\t\t\t}\n\n\t\t\treturn elem.selected === true;\n\t\t},\n\n\t\t// Contents\n\t\t\"empty\": function( elem ) {\n\n\t\t\t// http://www.w3.org/TR/selectors/#empty-pseudo\n\t\t\t// :empty is negated by element (1) or content nodes (text: 3; cdata: 4; entity ref: 5),\n\t\t\t// but not by others (comment: 8; processing instruction: 7; etc.)\n\t\t\t// nodeType < 6 works because attributes (2) do not appear as children\n\t\t\tfor ( elem = elem.firstChild; elem; elem = elem.nextSibling ) {\n\t\t\t\tif ( elem.nodeType < 6 ) {\n\t\t\t\t\treturn false;\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn true;\n\t\t},\n\n\t\t\"parent\": function( elem ) {\n\t\t\treturn !Expr.pseudos[ \"empty\" ]( elem );\n\t\t},\n\n\t\t// Element/input types\n\t\t\"header\": function( elem ) {\n\t\t\treturn rheader.test( elem.nodeName );\n\t\t},\n\n\t\t\"input\": function( elem ) {\n\t\t\treturn rinputs.test( elem.nodeName );\n\t\t},\n\n\t\t\"button\": function( elem ) {\n\t\t\tvar name = elem.nodeName.toLowerCase();\n\t\t\treturn name === \"input\" && elem.type === \"button\" || name === \"button\";\n\t\t},\n\n\t\t\"text\": function( elem ) {\n\t\t\tvar attr;\n\t\t\treturn elem.nodeName.toLowerCase() === \"input\" &&\n\t\t\t\telem.type === \"text\" &&\n\n\t\t\t\t// Support: IE<8\n\t\t\t\t// New HTML5 attribute values (e.g., \"search\") appear with elem.type === \"text\"\n\t\t\t\t( ( attr = elem.getAttribute( \"type\" ) ) == null ||\n\t\t\t\t\tattr.toLowerCase() === \"text\" );\n\t\t},\n\n\t\t// Position-in-collection\n\t\t\"first\": createPositionalPseudo( function() {\n\t\t\treturn [ 0 ];\n\t\t} ),\n\n\t\t\"last\": createPositionalPseudo( function( _matchIndexes, length ) {\n\t\t\treturn [ length - 1 ];\n\t\t} ),\n\n\t\t\"eq\": createPositionalPseudo( function( _matchIndexes, length, argument ) {\n\t\t\treturn [ argument < 0 ? argument + length : argument ];\n\t\t} ),\n\n\t\t\"even\": createPositionalPseudo( function( matchIndexes, length ) {\n\t\t\tvar i = 0;\n\t\t\tfor ( ; i < length; i += 2 ) {\n\t\t\t\tmatchIndexes.push( i );\n\t\t\t}\n\t\t\treturn matchIndexes;\n\t\t} ),\n\n\t\t\"odd\": createPositionalPseudo( function( matchIndexes, length ) {\n\t\t\tvar i = 1;\n\t\t\tfor ( ; i < length; i += 2 ) {\n\t\t\t\tmatchIndexes.push( i );\n\t\t\t}\n\t\t\treturn matchIndexes;\n\t\t} ),\n\n\t\t\"lt\": createPositionalPseudo( function( matchIndexes, length, argument ) {\n\t\t\tvar i = argument < 0 ?\n\t\t\t\targument + length :\n\t\t\t\targument > length ?\n\t\t\t\t\tlength :\n\t\t\t\t\targument;\n\t\t\tfor ( ; --i >= 0; ) {\n\t\t\t\tmatchIndexes.push( i );\n\t\t\t}\n\t\t\treturn matchIndexes;\n\t\t} ),\n\n\t\t\"gt\": createPositionalPseudo( function( matchIndexes, length, argument ) {\n\t\t\tvar i = argument < 0 ? argument + length : argument;\n\t\t\tfor ( ; ++i < length; ) {\n\t\t\t\tmatchIndexes.push( i );\n\t\t\t}\n\t\t\treturn matchIndexes;\n\t\t} )\n\t}\n};\n\nExpr.pseudos[ \"nth\" ] = Expr.pseudos[ \"eq\" ];\n\n// Add button/input type pseudos\nfor ( i in { radio: true, checkbox: true, file: true, password: true, image: true } ) {\n\tExpr.pseudos[ i ] = createInputPseudo( i );\n}\nfor ( i in { submit: true, reset: true } ) {\n\tExpr.pseudos[ i ] = createButtonPseudo( i );\n}\n\n// Easy API for creating new setFilters\nfunction setFilters() {}\nsetFilters.prototype = Expr.filters = Expr.pseudos;\nExpr.setFilters = new setFilters();\n\ntokenize = Sizzle.tokenize = function( selector, parseOnly ) {\n\tvar matched, match, tokens, type,\n\t\tsoFar, groups, preFilters,\n\t\tcached = tokenCache[ selector + \" \" ];\n\n\tif ( cached ) {\n\t\treturn parseOnly ? 0 : cached.slice( 0 );\n\t}\n\n\tsoFar = selector;\n\tgroups = [];\n\tpreFilters = Expr.preFilter;\n\n\twhile ( soFar ) {\n\n\t\t// Comma and first run\n\t\tif ( !matched || ( match = rcomma.exec( soFar ) ) ) {\n\t\t\tif ( match ) {\n\n\t\t\t\t// Don't consume trailing commas as valid\n\t\t\t\tsoFar = soFar.slice( match[ 0 ].length ) || soFar;\n\t\t\t}\n\t\t\tgroups.push( ( tokens = [] ) );\n\t\t}\n\n\t\tmatched = false;\n\n\t\t// Combinators\n\t\tif ( ( match = rcombinators.exec( soFar ) ) ) {\n\t\t\tmatched = match.shift();\n\t\t\ttokens.push( {\n\t\t\t\tvalue: matched,\n\n\t\t\t\t// Cast descendant combinators to space\n\t\t\t\ttype: match[ 0 ].replace( rtrim, \" \" )\n\t\t\t} );\n\t\t\tsoFar = soFar.slice( matched.length );\n\t\t}\n\n\t\t// Filters\n\t\tfor ( type in Expr.filter ) {\n\t\t\tif ( ( match = matchExpr[ type ].exec( soFar ) ) && ( !preFilters[ type ] ||\n\t\t\t\t( match = preFilters[ type ]( match ) ) ) ) {\n\t\t\t\tmatched = match.shift();\n\t\t\t\ttokens.push( {\n\t\t\t\t\tvalue: matched,\n\t\t\t\t\ttype: type,\n\t\t\t\t\tmatches: match\n\t\t\t\t} );\n\t\t\t\tsoFar = soFar.slice( matched.length );\n\t\t\t}\n\t\t}\n\n\t\tif ( !matched ) {\n\t\t\tbreak;\n\t\t}\n\t}\n\n\t// Return the length of the invalid excess\n\t// if we're just parsing\n\t// Otherwise, throw an error or return tokens\n\treturn parseOnly ?\n\t\tsoFar.length :\n\t\tsoFar ?\n\t\t\tSizzle.error( selector ) :\n\n\t\t\t// Cache the tokens\n\t\t\ttokenCache( selector, groups ).slice( 0 );\n};\n\nfunction toSelector( tokens ) {\n\tvar i = 0,\n\t\tlen = tokens.length,\n\t\tselector = \"\";\n\tfor ( ; i < len; i++ ) {\n\t\tselector += tokens[ i ].value;\n\t}\n\treturn selector;\n}\n\nfunction addCombinator( matcher, combinator, base ) {\n\tvar dir = combinator.dir,\n\t\tskip = combinator.next,\n\t\tkey = skip || dir,\n\t\tcheckNonElements = base && key === \"parentNode\",\n\t\tdoneName = done++;\n\n\treturn combinator.first ?\n\n\t\t// Check against closest ancestor/preceding element\n\t\tfunction( elem, context, xml ) {\n\t\t\twhile ( ( elem = elem[ dir ] ) ) {\n\t\t\t\tif ( elem.nodeType === 1 || checkNonElements ) {\n\t\t\t\t\treturn matcher( elem, context, xml );\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn false;\n\t\t} :\n\n\t\t// Check against all ancestor/preceding elements\n\t\tfunction( elem, context, xml ) {\n\t\t\tvar oldCache, uniqueCache, outerCache,\n\t\t\t\tnewCache = [ dirruns, doneName ];\n\n\t\t\t// We can't set arbitrary data on XML nodes, so they don't benefit from combinator caching\n\t\t\tif ( xml ) {\n\t\t\t\twhile ( ( elem = elem[ dir ] ) ) {\n\t\t\t\t\tif ( elem.nodeType === 1 || checkNonElements ) {\n\t\t\t\t\t\tif ( matcher( elem, context, xml ) ) {\n\t\t\t\t\t\t\treturn true;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\twhile ( ( elem = elem[ dir ] ) ) {\n\t\t\t\t\tif ( elem.nodeType === 1 || checkNonElements ) {\n\t\t\t\t\t\touterCache = elem[ expando ] || ( elem[ expando ] = {} );\n\n\t\t\t\t\t\t// Support: IE <9 only\n\t\t\t\t\t\t// Defend against cloned attroperties (jQuery gh-1709)\n\t\t\t\t\t\tuniqueCache = outerCache[ elem.uniqueID ] ||\n\t\t\t\t\t\t\t( outerCache[ elem.uniqueID ] = {} );\n\n\t\t\t\t\t\tif ( skip && skip === elem.nodeName.toLowerCase() ) {\n\t\t\t\t\t\t\telem = elem[ dir ] || elem;\n\t\t\t\t\t\t} else if ( ( oldCache = uniqueCache[ key ] ) &&\n\t\t\t\t\t\t\toldCache[ 0 ] === dirruns && oldCache[ 1 ] === doneName ) {\n\n\t\t\t\t\t\t\t// Assign to newCache so results back-propagate to previous elements\n\t\t\t\t\t\t\treturn ( newCache[ 2 ] = oldCache[ 2 ] );\n\t\t\t\t\t\t} else {\n\n\t\t\t\t\t\t\t// Reuse newcache so results back-propagate to previous elements\n\t\t\t\t\t\t\tuniqueCache[ key ] = newCache;\n\n\t\t\t\t\t\t\t// A match means we're done; a fail means we have to keep checking\n\t\t\t\t\t\t\tif ( ( newCache[ 2 ] = matcher( elem, context, xml ) ) ) {\n\t\t\t\t\t\t\t\treturn true;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn false;\n\t\t};\n}\n\nfunction elementMatcher( matchers ) {\n\treturn matchers.length > 1 ?\n\t\tfunction( elem, context, xml ) {\n\t\t\tvar i = matchers.length;\n\t\t\twhile ( i-- ) {\n\t\t\t\tif ( !matchers[ i ]( elem, context, xml ) ) {\n\t\t\t\t\treturn false;\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn true;\n\t\t} :\n\t\tmatchers[ 0 ];\n}\n\nfunction multipleContexts( selector, contexts, results ) {\n\tvar i = 0,\n\t\tlen = contexts.length;\n\tfor ( ; i < len; i++ ) {\n\t\tSizzle( selector, contexts[ i ], results );\n\t}\n\treturn results;\n}\n\nfunction condense( unmatched, map, filter, context, xml ) {\n\tvar elem,\n\t\tnewUnmatched = [],\n\t\ti = 0,\n\t\tlen = unmatched.length,\n\t\tmapped = map != null;\n\n\tfor ( ; i < len; i++ ) {\n\t\tif ( ( elem = unmatched[ i ] ) ) {\n\t\t\tif ( !filter || filter( elem, context, xml ) ) {\n\t\t\t\tnewUnmatched.push( elem );\n\t\t\t\tif ( mapped ) {\n\t\t\t\t\tmap.push( i );\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\treturn newUnmatched;\n}\n\nfunction setMatcher( preFilter, selector, matcher, postFilter, postFinder, postSelector ) {\n\tif ( postFilter && !postFilter[ expando ] ) {\n\t\tpostFilter = setMatcher( postFilter );\n\t}\n\tif ( postFinder && !postFinder[ expando ] ) {\n\t\tpostFinder = setMatcher( postFinder, postSelector );\n\t}\n\treturn markFunction( function( seed, results, context, xml ) {\n\t\tvar temp, i, elem,\n\t\t\tpreMap = [],\n\t\t\tpostMap = [],\n\t\t\tpreexisting = results.length,\n\n\t\t\t// Get initial elements from seed or context\n\t\t\telems = seed || multipleContexts(\n\t\t\t\tselector || \"*\",\n\t\t\t\tcontext.nodeType ? [ context ] : context,\n\t\t\t\t[]\n\t\t\t),\n\n\t\t\t// Prefilter to get matcher input, preserving a map for seed-results synchronization\n\t\t\tmatcherIn = preFilter && ( seed || !selector ) ?\n\t\t\t\tcondense( elems, preMap, preFilter, context, xml ) :\n\t\t\t\telems,\n\n\t\t\tmatcherOut = matcher ?\n\n\t\t\t\t// If we have a postFinder, or filtered seed, or non-seed postFilter or preexisting results,\n\t\t\t\tpostFinder || ( seed ? preFilter : preexisting || postFilter ) ?\n\n\t\t\t\t\t// ...intermediate processing is necessary\n\t\t\t\t\t[] :\n\n\t\t\t\t\t// ...otherwise use results directly\n\t\t\t\t\tresults :\n\t\t\t\tmatcherIn;\n\n\t\t// Find primary matches\n\t\tif ( matcher ) {\n\t\t\tmatcher( matcherIn, matcherOut, context, xml );\n\t\t}\n\n\t\t// Apply postFilter\n\t\tif ( postFilter ) {\n\t\t\ttemp = condense( matcherOut, postMap );\n\t\t\tpostFilter( temp, [], context, xml );\n\n\t\t\t// Un-match failing elements by moving them back to matcherIn\n\t\t\ti = temp.length;\n\t\t\twhile ( i-- ) {\n\t\t\t\tif ( ( elem = temp[ i ] ) ) {\n\t\t\t\t\tmatcherOut[ postMap[ i ] ] = !( matcherIn[ postMap[ i ] ] = elem );\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tif ( seed ) {\n\t\t\tif ( postFinder || preFilter ) {\n\t\t\t\tif ( postFinder ) {\n\n\t\t\t\t\t// Get the final matcherOut by condensing this intermediate into postFinder contexts\n\t\t\t\t\ttemp = [];\n\t\t\t\t\ti = matcherOut.length;\n\t\t\t\t\twhile ( i-- ) {\n\t\t\t\t\t\tif ( ( elem = matcherOut[ i ] ) ) {\n\n\t\t\t\t\t\t\t// Restore matcherIn since elem is not yet a final match\n\t\t\t\t\t\t\ttemp.push( ( matcherIn[ i ] = elem ) );\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tpostFinder( null, ( matcherOut = [] ), temp, xml );\n\t\t\t\t}\n\n\t\t\t\t// Move matched elements from seed to results to keep them synchronized\n\t\t\t\ti = matcherOut.length;\n\t\t\t\twhile ( i-- ) {\n\t\t\t\t\tif ( ( elem = matcherOut[ i ] ) &&\n\t\t\t\t\t\t( temp = postFinder ? indexOf( seed, elem ) : preMap[ i ] ) > -1 ) {\n\n\t\t\t\t\t\tseed[ temp ] = !( results[ temp ] = elem );\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t// Add elements to results, through postFinder if defined\n\t\t} else {\n\t\t\tmatcherOut = condense(\n\t\t\t\tmatcherOut === results ?\n\t\t\t\t\tmatcherOut.splice( preexisting, matcherOut.length ) :\n\t\t\t\t\tmatcherOut\n\t\t\t);\n\t\t\tif ( postFinder ) {\n\t\t\t\tpostFinder( null, results, matcherOut, xml );\n\t\t\t} else {\n\t\t\t\tpush.apply( results, matcherOut );\n\t\t\t}\n\t\t}\n\t} );\n}\n\nfunction matcherFromTokens( tokens ) {\n\tvar checkContext, matcher, j,\n\t\tlen = tokens.length,\n\t\tleadingRelative = Expr.relative[ tokens[ 0 ].type ],\n\t\timplicitRelative = leadingRelative || Expr.relative[ \" \" ],\n\t\ti = leadingRelative ? 1 : 0,\n\n\t\t// The foundational matcher ensures that elements are reachable from top-level context(s)\n\t\tmatchContext = addCombinator( function( elem ) {\n\t\t\treturn elem === checkContext;\n\t\t}, implicitRelative, true ),\n\t\tmatchAnyContext = addCombinator( function( elem ) {\n\t\t\treturn indexOf( checkContext, elem ) > -1;\n\t\t}, implicitRelative, true ),\n\t\tmatchers = [ function( elem, context, xml ) {\n\t\t\tvar ret = ( !leadingRelative && ( xml || context !== outermostContext ) ) || (\n\t\t\t\t( checkContext = context ).nodeType ?\n\t\t\t\t\tmatchContext( elem, context, xml ) :\n\t\t\t\t\tmatchAnyContext( elem, context, xml ) );\n\n\t\t\t// Avoid hanging onto element (issue #299)\n\t\t\tcheckContext = null;\n\t\t\treturn ret;\n\t\t} ];\n\n\tfor ( ; i < len; i++ ) {\n\t\tif ( ( matcher = Expr.relative[ tokens[ i ].type ] ) ) {\n\t\t\tmatchers = [ addCombinator( elementMatcher( matchers ), matcher ) ];\n\t\t} else {\n\t\t\tmatcher = Expr.filter[ tokens[ i ].type ].apply( null, tokens[ i ].matches );\n\n\t\t\t// Return special upon seeing a positional matcher\n\t\t\tif ( matcher[ expando ] ) {\n\n\t\t\t\t// Find the next relative operator (if any) for proper handling\n\t\t\t\tj = ++i;\n\t\t\t\tfor ( ; j < len; j++ ) {\n\t\t\t\t\tif ( Expr.relative[ tokens[ j ].type ] ) {\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\treturn setMatcher(\n\t\t\t\t\ti > 1 && elementMatcher( matchers ),\n\t\t\t\t\ti > 1 && toSelector(\n\n\t\t\t\t\t// If the preceding token was a descendant combinator, insert an implicit any-element `*`\n\t\t\t\t\ttokens\n\t\t\t\t\t\t.slice( 0, i - 1 )\n\t\t\t\t\t\t.concat( { value: tokens[ i - 2 ].type === \" \" ? \"*\" : \"\" } )\n\t\t\t\t\t).replace( rtrim, \"$1\" ),\n\t\t\t\t\tmatcher,\n\t\t\t\t\ti < j && matcherFromTokens( tokens.slice( i, j ) ),\n\t\t\t\t\tj < len && matcherFromTokens( ( tokens = tokens.slice( j ) ) ),\n\t\t\t\t\tj < len && toSelector( tokens )\n\t\t\t\t);\n\t\t\t}\n\t\t\tmatchers.push( matcher );\n\t\t}\n\t}\n\n\treturn elementMatcher( matchers );\n}\n\nfunction matcherFromGroupMatchers( elementMatchers, setMatchers ) {\n\tvar bySet = setMatchers.length > 0,\n\t\tbyElement = elementMatchers.length > 0,\n\t\tsuperMatcher = function( seed, context, xml, results, outermost ) {\n\t\t\tvar elem, j, matcher,\n\t\t\t\tmatchedCount = 0,\n\t\t\t\ti = \"0\",\n\t\t\t\tunmatched = seed && [],\n\t\t\t\tsetMatched = [],\n\t\t\t\tcontextBackup = outermostContext,\n\n\t\t\t\t// We must always have either seed elements or outermost context\n\t\t\t\telems = seed || byElement && Expr.find[ \"TAG\" ]( \"*\", outermost ),\n\n\t\t\t\t// Use integer dirruns iff this is the outermost matcher\n\t\t\t\tdirrunsUnique = ( dirruns += contextBackup == null ? 1 : Math.random() || 0.1 ),\n\t\t\t\tlen = elems.length;\n\n\t\t\tif ( outermost ) {\n\n\t\t\t\t// Support: IE 11+, Edge 17 - 18+\n\t\t\t\t// IE/Edge sometimes throw a \"Permission denied\" error when strict-comparing\n\t\t\t\t// two documents; shallow comparisons work.\n\t\t\t\t// eslint-disable-next-line eqeqeq\n\t\t\t\toutermostContext = context == document || context || outermost;\n\t\t\t}\n\n\t\t\t// Add elements passing elementMatchers directly to results\n\t\t\t// Support: IE<9, Safari\n\t\t\t// Tolerate NodeList properties (IE: \"length\"; Safari: ) matching elements by id\n\t\t\tfor ( ; i !== len && ( elem = elems[ i ] ) != null; i++ ) {\n\t\t\t\tif ( byElement && elem ) {\n\t\t\t\t\tj = 0;\n\n\t\t\t\t\t// Support: IE 11+, Edge 17 - 18+\n\t\t\t\t\t// IE/Edge sometimes throw a \"Permission denied\" error when strict-comparing\n\t\t\t\t\t// two documents; shallow comparisons work.\n\t\t\t\t\t// eslint-disable-next-line eqeqeq\n\t\t\t\t\tif ( !context && elem.ownerDocument != document ) {\n\t\t\t\t\t\tsetDocument( elem );\n\t\t\t\t\t\txml = !documentIsHTML;\n\t\t\t\t\t}\n\t\t\t\t\twhile ( ( matcher = elementMatchers[ j++ ] ) ) {\n\t\t\t\t\t\tif ( matcher( elem, context || document, xml ) ) {\n\t\t\t\t\t\t\tresults.push( elem );\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tif ( outermost ) {\n\t\t\t\t\t\tdirruns = dirrunsUnique;\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\t// Track unmatched elements for set filters\n\t\t\t\tif ( bySet ) {\n\n\t\t\t\t\t// They will have gone through all possible matchers\n\t\t\t\t\tif ( ( elem = !matcher && elem ) ) {\n\t\t\t\t\t\tmatchedCount--;\n\t\t\t\t\t}\n\n\t\t\t\t\t// Lengthen the array for every element, matched or not\n\t\t\t\t\tif ( seed ) {\n\t\t\t\t\t\tunmatched.push( elem );\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// `i` is now the count of elements visited above, and adding it to `matchedCount`\n\t\t\t// makes the latter nonnegative.\n\t\t\tmatchedCount += i;\n\n\t\t\t// Apply set filters to unmatched elements\n\t\t\t// NOTE: This can be skipped if there are no unmatched elements (i.e., `matchedCount`\n\t\t\t// equals `i`), unless we didn't visit _any_ elements in the above loop because we have\n\t\t\t// no element matchers and no seed.\n\t\t\t// Incrementing an initially-string \"0\" `i` allows `i` to remain a string only in that\n\t\t\t// case, which will result in a \"00\" `matchedCount` that differs from `i` but is also\n\t\t\t// numerically zero.\n\t\t\tif ( bySet && i !== matchedCount ) {\n\t\t\t\tj = 0;\n\t\t\t\twhile ( ( matcher = setMatchers[ j++ ] ) ) {\n\t\t\t\t\tmatcher( unmatched, setMatched, context, xml );\n\t\t\t\t}\n\n\t\t\t\tif ( seed ) {\n\n\t\t\t\t\t// Reintegrate element matches to eliminate the need for sorting\n\t\t\t\t\tif ( matchedCount > 0 ) {\n\t\t\t\t\t\twhile ( i-- ) {\n\t\t\t\t\t\t\tif ( !( unmatched[ i ] || setMatched[ i ] ) ) {\n\t\t\t\t\t\t\t\tsetMatched[ i ] = pop.call( results );\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\t// Discard index placeholder values to get only actual matches\n\t\t\t\t\tsetMatched = condense( setMatched );\n\t\t\t\t}\n\n\t\t\t\t// Add matches to results\n\t\t\t\tpush.apply( results, setMatched );\n\n\t\t\t\t// Seedless set matches succeeding multiple successful matchers stipulate sorting\n\t\t\t\tif ( outermost && !seed && setMatched.length > 0 &&\n\t\t\t\t\t( matchedCount + setMatchers.length ) > 1 ) {\n\n\t\t\t\t\tSizzle.uniqueSort( results );\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Override manipulation of globals by nested matchers\n\t\t\tif ( outermost ) {\n\t\t\t\tdirruns = dirrunsUnique;\n\t\t\t\toutermostContext = contextBackup;\n\t\t\t}\n\n\t\t\treturn unmatched;\n\t\t};\n\n\treturn bySet ?\n\t\tmarkFunction( superMatcher ) :\n\t\tsuperMatcher;\n}\n\ncompile = Sizzle.compile = function( selector, match /* Internal Use Only */ ) {\n\tvar i,\n\t\tsetMatchers = [],\n\t\telementMatchers = [],\n\t\tcached = compilerCache[ selector + \" \" ];\n\n\tif ( !cached ) {\n\n\t\t// Generate a function of recursive functions that can be used to check each element\n\t\tif ( !match ) {\n\t\t\tmatch = tokenize( selector );\n\t\t}\n\t\ti = match.length;\n\t\twhile ( i-- ) {\n\t\t\tcached = matcherFromTokens( match[ i ] );\n\t\t\tif ( cached[ expando ] ) {\n\t\t\t\tsetMatchers.push( cached );\n\t\t\t} else {\n\t\t\t\telementMatchers.push( cached );\n\t\t\t}\n\t\t}\n\n\t\t// Cache the compiled function\n\t\tcached = compilerCache(\n\t\t\tselector,\n\t\t\tmatcherFromGroupMatchers( elementMatchers, setMatchers )\n\t\t);\n\n\t\t// Save selector and tokenization\n\t\tcached.selector = selector;\n\t}\n\treturn cached;\n};\n\n/**\n * A low-level selection function that works with Sizzle's compiled\n * selector functions\n * @param {String|Function} selector A selector or a pre-compiled\n * selector function built with Sizzle.compile\n * @param {Element} context\n * @param {Array} [results]\n * @param {Array} [seed] A set of elements to match against\n */\nselect = Sizzle.select = function( selector, context, results, seed ) {\n\tvar i, tokens, token, type, find,\n\t\tcompiled = typeof selector === \"function\" && selector,\n\t\tmatch = !seed && tokenize( ( selector = compiled.selector || selector ) );\n\n\tresults = results || [];\n\n\t// Try to minimize operations if there is only one selector in the list and no seed\n\t// (the latter of which guarantees us context)\n\tif ( match.length === 1 ) {\n\n\t\t// Reduce context if the leading compound selector is an ID\n\t\ttokens = match[ 0 ] = match[ 0 ].slice( 0 );\n\t\tif ( tokens.length > 2 && ( token = tokens[ 0 ] ).type === \"ID\" &&\n\t\t\tcontext.nodeType === 9 && documentIsHTML && Expr.relative[ tokens[ 1 ].type ] ) {\n\n\t\t\tcontext = ( Expr.find[ \"ID\" ]( token.matches[ 0 ]\n\t\t\t\t.replace( runescape, funescape ), context ) || [] )[ 0 ];\n\t\t\tif ( !context ) {\n\t\t\t\treturn results;\n\n\t\t\t// Precompiled matchers will still verify ancestry, so step up a level\n\t\t\t} else if ( compiled ) {\n\t\t\t\tcontext = context.parentNode;\n\t\t\t}\n\n\t\t\tselector = selector.slice( tokens.shift().value.length );\n\t\t}\n\n\t\t// Fetch a seed set for right-to-left matching\n\t\ti = matchExpr[ \"needsContext\" ].test( selector ) ? 0 : tokens.length;\n\t\twhile ( i-- ) {\n\t\t\ttoken = tokens[ i ];\n\n\t\t\t// Abort if we hit a combinator\n\t\t\tif ( Expr.relative[ ( type = token.type ) ] ) {\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\tif ( ( find = Expr.find[ type ] ) ) {\n\n\t\t\t\t// Search, expanding context for leading sibling combinators\n\t\t\t\tif ( ( seed = find(\n\t\t\t\t\ttoken.matches[ 0 ].replace( runescape, funescape ),\n\t\t\t\t\trsibling.test( tokens[ 0 ].type ) && testContext( context.parentNode ) ||\n\t\t\t\t\t\tcontext\n\t\t\t\t) ) ) {\n\n\t\t\t\t\t// If seed is empty or no tokens remain, we can return early\n\t\t\t\t\ttokens.splice( i, 1 );\n\t\t\t\t\tselector = seed.length && toSelector( tokens );\n\t\t\t\t\tif ( !selector ) {\n\t\t\t\t\t\tpush.apply( results, seed );\n\t\t\t\t\t\treturn results;\n\t\t\t\t\t}\n\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\t// Compile and execute a filtering function if one is not provided\n\t// Provide `match` to avoid retokenization if we modified the selector above\n\t( compiled || compile( selector, match ) )(\n\t\tseed,\n\t\tcontext,\n\t\t!documentIsHTML,\n\t\tresults,\n\t\t!context || rsibling.test( selector ) && testContext( context.parentNode ) || context\n\t);\n\treturn results;\n};\n\n// One-time assignments\n\n// Sort stability\nsupport.sortStable = expando.split( \"\" ).sort( sortOrder ).join( \"\" ) === expando;\n\n// Support: Chrome 14-35+\n// Always assume duplicates if they aren't passed to the comparison function\nsupport.detectDuplicates = !!hasDuplicate;\n\n// Initialize against the default document\nsetDocument();\n\n// Support: Webkit<537.32 - Safari 6.0.3/Chrome 25 (fixed in Chrome 27)\n// Detached nodes confoundingly follow *each other*\nsupport.sortDetached = assert( function( el ) {\n\n\t// Should return 1, but returns 4 (following)\n\treturn el.compareDocumentPosition( document.createElement( \"fieldset\" ) ) & 1;\n} );\n\n// Support: IE<8\n// Prevent attribute/property \"interpolation\"\n// https://msdn.microsoft.com/en-us/library/ms536429%28VS.85%29.aspx\nif ( !assert( function( el ) {\n\tel.innerHTML = \"\";\n\treturn el.firstChild.getAttribute( \"href\" ) === \"#\";\n} ) ) {\n\taddHandle( \"type|href|height|width\", function( elem, name, isXML ) {\n\t\tif ( !isXML ) {\n\t\t\treturn elem.getAttribute( name, name.toLowerCase() === \"type\" ? 1 : 2 );\n\t\t}\n\t} );\n}\n\n// Support: IE<9\n// Use defaultValue in place of getAttribute(\"value\")\nif ( !support.attributes || !assert( function( el ) {\n\tel.innerHTML = \"\";\n\tel.firstChild.setAttribute( \"value\", \"\" );\n\treturn el.firstChild.getAttribute( \"value\" ) === \"\";\n} ) ) {\n\taddHandle( \"value\", function( elem, _name, isXML ) {\n\t\tif ( !isXML && elem.nodeName.toLowerCase() === \"input\" ) {\n\t\t\treturn elem.defaultValue;\n\t\t}\n\t} );\n}\n\n// Support: IE<9\n// Use getAttributeNode to fetch booleans when getAttribute lies\nif ( !assert( function( el ) {\n\treturn el.getAttribute( \"disabled\" ) == null;\n} ) ) {\n\taddHandle( booleans, function( elem, name, isXML ) {\n\t\tvar val;\n\t\tif ( !isXML ) {\n\t\t\treturn elem[ name ] === true ? name.toLowerCase() :\n\t\t\t\t( val = elem.getAttributeNode( name ) ) && val.specified ?\n\t\t\t\t\tval.value :\n\t\t\t\t\tnull;\n\t\t}\n\t} );\n}\n\nreturn Sizzle;\n\n} )( window );\n\n\n\njQuery.find = Sizzle;\njQuery.expr = Sizzle.selectors;\n\n// Deprecated\njQuery.expr[ \":\" ] = jQuery.expr.pseudos;\njQuery.uniqueSort = jQuery.unique = Sizzle.uniqueSort;\njQuery.text = Sizzle.getText;\njQuery.isXMLDoc = Sizzle.isXML;\njQuery.contains = Sizzle.contains;\njQuery.escapeSelector = Sizzle.escape;\n\n\n\n\nvar dir = function( elem, dir, until ) {\n\tvar matched = [],\n\t\ttruncate = until !== undefined;\n\n\twhile ( ( elem = elem[ dir ] ) && elem.nodeType !== 9 ) {\n\t\tif ( elem.nodeType === 1 ) {\n\t\t\tif ( truncate && jQuery( elem ).is( until ) ) {\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\tmatched.push( elem );\n\t\t}\n\t}\n\treturn matched;\n};\n\n\nvar siblings = function( n, elem ) {\n\tvar matched = [];\n\n\tfor ( ; n; n = n.nextSibling ) {\n\t\tif ( n.nodeType === 1 && n !== elem ) {\n\t\t\tmatched.push( n );\n\t\t}\n\t}\n\n\treturn matched;\n};\n\n\nvar rneedsContext = jQuery.expr.match.needsContext;\n\n\n\nfunction nodeName( elem, name ) {\n\n\treturn elem.nodeName && elem.nodeName.toLowerCase() === name.toLowerCase();\n\n}\nvar rsingleTag = ( /^<([a-z][^\\/\\0>:\\x20\\t\\r\\n\\f]*)[\\x20\\t\\r\\n\\f]*\\/?>(?:<\\/\\1>|)$/i );\n\n\n\n// Implement the identical functionality for filter and not\nfunction winnow( elements, qualifier, not ) {\n\tif ( isFunction( qualifier ) ) {\n\t\treturn jQuery.grep( elements, function( elem, i ) {\n\t\t\treturn !!qualifier.call( elem, i, elem ) !== not;\n\t\t} );\n\t}\n\n\t// Single element\n\tif ( qualifier.nodeType ) {\n\t\treturn jQuery.grep( elements, function( elem ) {\n\t\t\treturn ( elem === qualifier ) !== not;\n\t\t} );\n\t}\n\n\t// Arraylike of elements (jQuery, arguments, Array)\n\tif ( typeof qualifier !== \"string\" ) {\n\t\treturn jQuery.grep( elements, function( elem ) {\n\t\t\treturn ( indexOf.call( qualifier, elem ) > -1 ) !== not;\n\t\t} );\n\t}\n\n\t// Filtered directly for both simple and complex selectors\n\treturn jQuery.filter( qualifier, elements, not );\n}\n\njQuery.filter = function( expr, elems, not ) {\n\tvar elem = elems[ 0 ];\n\n\tif ( not ) {\n\t\texpr = \":not(\" + expr + \")\";\n\t}\n\n\tif ( elems.length === 1 && elem.nodeType === 1 ) {\n\t\treturn jQuery.find.matchesSelector( elem, expr ) ? [ elem ] : [];\n\t}\n\n\treturn jQuery.find.matches( expr, jQuery.grep( elems, function( elem ) {\n\t\treturn elem.nodeType === 1;\n\t} ) );\n};\n\njQuery.fn.extend( {\n\tfind: function( selector ) {\n\t\tvar i, ret,\n\t\t\tlen = this.length,\n\t\t\tself = this;\n\n\t\tif ( typeof selector !== \"string\" ) {\n\t\t\treturn this.pushStack( jQuery( selector ).filter( function() {\n\t\t\t\tfor ( i = 0; i < len; i++ ) {\n\t\t\t\t\tif ( jQuery.contains( self[ i ], this ) ) {\n\t\t\t\t\t\treturn true;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t} ) );\n\t\t}\n\n\t\tret = this.pushStack( [] );\n\n\t\tfor ( i = 0; i < len; i++ ) {\n\t\t\tjQuery.find( selector, self[ i ], ret );\n\t\t}\n\n\t\treturn len > 1 ? jQuery.uniqueSort( ret ) : ret;\n\t},\n\tfilter: function( selector ) {\n\t\treturn this.pushStack( winnow( this, selector || [], false ) );\n\t},\n\tnot: function( selector ) {\n\t\treturn this.pushStack( winnow( this, selector || [], true ) );\n\t},\n\tis: function( selector ) {\n\t\treturn !!winnow(\n\t\t\tthis,\n\n\t\t\t// If this is a positional/relative selector, check membership in the returned set\n\t\t\t// so $(\"p:first\").is(\"p:last\") won't return true for a doc with two \"p\".\n\t\t\ttypeof selector === \"string\" && rneedsContext.test( selector ) ?\n\t\t\t\tjQuery( selector ) :\n\t\t\t\tselector || [],\n\t\t\tfalse\n\t\t).length;\n\t}\n} );\n\n\n// Initialize a jQuery object\n\n\n// A central reference to the root jQuery(document)\nvar rootjQuery,\n\n\t// A simple way to check for HTML strings\n\t// Prioritize #id over to avoid XSS via location.hash (#9521)\n\t// Strict HTML recognition (#11290: must start with <)\n\t// Shortcut simple #id case for speed\n\trquickExpr = /^(?:\\s*(<[\\w\\W]+>)[^>]*|#([\\w-]+))$/,\n\n\tinit = jQuery.fn.init = function( selector, context, root ) {\n\t\tvar match, elem;\n\n\t\t// HANDLE: $(\"\"), $(null), $(undefined), $(false)\n\t\tif ( !selector ) {\n\t\t\treturn this;\n\t\t}\n\n\t\t// Method init() accepts an alternate rootjQuery\n\t\t// so migrate can support jQuery.sub (gh-2101)\n\t\troot = root || rootjQuery;\n\n\t\t// Handle HTML strings\n\t\tif ( typeof selector === \"string\" ) {\n\t\t\tif ( selector[ 0 ] === \"<\" &&\n\t\t\t\tselector[ selector.length - 1 ] === \">\" &&\n\t\t\t\tselector.length >= 3 ) {\n\n\t\t\t\t// Assume that strings that start and end with <> are HTML and skip the regex check\n\t\t\t\tmatch = [ null, selector, null ];\n\n\t\t\t} else {\n\t\t\t\tmatch = rquickExpr.exec( selector );\n\t\t\t}\n\n\t\t\t// Match html or make sure no context is specified for #id\n\t\t\tif ( match && ( match[ 1 ] || !context ) ) {\n\n\t\t\t\t// HANDLE: $(html) -> $(array)\n\t\t\t\tif ( match[ 1 ] ) {\n\t\t\t\t\tcontext = context instanceof jQuery ? context[ 0 ] : context;\n\n\t\t\t\t\t// Option to run scripts is true for back-compat\n\t\t\t\t\t// Intentionally let the error be thrown if parseHTML is not present\n\t\t\t\t\tjQuery.merge( this, jQuery.parseHTML(\n\t\t\t\t\t\tmatch[ 1 ],\n\t\t\t\t\t\tcontext && context.nodeType ? context.ownerDocument || context : document,\n\t\t\t\t\t\ttrue\n\t\t\t\t\t) );\n\n\t\t\t\t\t// HANDLE: $(html, props)\n\t\t\t\t\tif ( rsingleTag.test( match[ 1 ] ) && jQuery.isPlainObject( context ) ) {\n\t\t\t\t\t\tfor ( match in context ) {\n\n\t\t\t\t\t\t\t// Properties of context are called as methods if possible\n\t\t\t\t\t\t\tif ( isFunction( this[ match ] ) ) {\n\t\t\t\t\t\t\t\tthis[ match ]( context[ match ] );\n\n\t\t\t\t\t\t\t// ...and otherwise set as attributes\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\tthis.attr( match, context[ match ] );\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\treturn this;\n\n\t\t\t\t// HANDLE: $(#id)\n\t\t\t\t} else {\n\t\t\t\t\telem = document.getElementById( match[ 2 ] );\n\n\t\t\t\t\tif ( elem ) {\n\n\t\t\t\t\t\t// Inject the element directly into the jQuery object\n\t\t\t\t\t\tthis[ 0 ] = elem;\n\t\t\t\t\t\tthis.length = 1;\n\t\t\t\t\t}\n\t\t\t\t\treturn this;\n\t\t\t\t}\n\n\t\t\t// HANDLE: $(expr, $(...))\n\t\t\t} else if ( !context || context.jquery ) {\n\t\t\t\treturn ( context || root ).find( selector );\n\n\t\t\t// HANDLE: $(expr, context)\n\t\t\t// (which is just equivalent to: $(context).find(expr)\n\t\t\t} else {\n\t\t\t\treturn this.constructor( context ).find( selector );\n\t\t\t}\n\n\t\t// HANDLE: $(DOMElement)\n\t\t} else if ( selector.nodeType ) {\n\t\t\tthis[ 0 ] = selector;\n\t\t\tthis.length = 1;\n\t\t\treturn this;\n\n\t\t// HANDLE: $(function)\n\t\t// Shortcut for document ready\n\t\t} else if ( isFunction( selector ) ) {\n\t\t\treturn root.ready !== undefined ?\n\t\t\t\troot.ready( selector ) :\n\n\t\t\t\t// Execute immediately if ready is not present\n\t\t\t\tselector( jQuery );\n\t\t}\n\n\t\treturn jQuery.makeArray( selector, this );\n\t};\n\n// Give the init function the jQuery prototype for later instantiation\ninit.prototype = jQuery.fn;\n\n// Initialize central reference\nrootjQuery = jQuery( document );\n\n\nvar rparentsprev = /^(?:parents|prev(?:Until|All))/,\n\n\t// Methods guaranteed to produce a unique set when starting from a unique set\n\tguaranteedUnique = {\n\t\tchildren: true,\n\t\tcontents: true,\n\t\tnext: true,\n\t\tprev: true\n\t};\n\njQuery.fn.extend( {\n\thas: function( target ) {\n\t\tvar targets = jQuery( target, this ),\n\t\t\tl = targets.length;\n\n\t\treturn this.filter( function() {\n\t\t\tvar i = 0;\n\t\t\tfor ( ; i < l; i++ ) {\n\t\t\t\tif ( jQuery.contains( this, targets[ i ] ) ) {\n\t\t\t\t\treturn true;\n\t\t\t\t}\n\t\t\t}\n\t\t} );\n\t},\n\n\tclosest: function( selectors, context ) {\n\t\tvar cur,\n\t\t\ti = 0,\n\t\t\tl = this.length,\n\t\t\tmatched = [],\n\t\t\ttargets = typeof selectors !== \"string\" && jQuery( selectors );\n\n\t\t// Positional selectors never match, since there's no _selection_ context\n\t\tif ( !rneedsContext.test( selectors ) ) {\n\t\t\tfor ( ; i < l; i++ ) {\n\t\t\t\tfor ( cur = this[ i ]; cur && cur !== context; cur = cur.parentNode ) {\n\n\t\t\t\t\t// Always skip document fragments\n\t\t\t\t\tif ( cur.nodeType < 11 && ( targets ?\n\t\t\t\t\t\ttargets.index( cur ) > -1 :\n\n\t\t\t\t\t\t// Don't pass non-elements to Sizzle\n\t\t\t\t\t\tcur.nodeType === 1 &&\n\t\t\t\t\t\t\tjQuery.find.matchesSelector( cur, selectors ) ) ) {\n\n\t\t\t\t\t\tmatched.push( cur );\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\treturn this.pushStack( matched.length > 1 ? jQuery.uniqueSort( matched ) : matched );\n\t},\n\n\t// Determine the position of an element within the set\n\tindex: function( elem ) {\n\n\t\t// No argument, return index in parent\n\t\tif ( !elem ) {\n\t\t\treturn ( this[ 0 ] && this[ 0 ].parentNode ) ? this.first().prevAll().length : -1;\n\t\t}\n\n\t\t// Index in selector\n\t\tif ( typeof elem === \"string\" ) {\n\t\t\treturn indexOf.call( jQuery( elem ), this[ 0 ] );\n\t\t}\n\n\t\t// Locate the position of the desired element\n\t\treturn indexOf.call( this,\n\n\t\t\t// If it receives a jQuery object, the first element is used\n\t\t\telem.jquery ? elem[ 0 ] : elem\n\t\t);\n\t},\n\n\tadd: function( selector, context ) {\n\t\treturn this.pushStack(\n\t\t\tjQuery.uniqueSort(\n\t\t\t\tjQuery.merge( this.get(), jQuery( selector, context ) )\n\t\t\t)\n\t\t);\n\t},\n\n\taddBack: function( selector ) {\n\t\treturn this.add( selector == null ?\n\t\t\tthis.prevObject : this.prevObject.filter( selector )\n\t\t);\n\t}\n} );\n\nfunction sibling( cur, dir ) {\n\twhile ( ( cur = cur[ dir ] ) && cur.nodeType !== 1 ) {}\n\treturn cur;\n}\n\njQuery.each( {\n\tparent: function( elem ) {\n\t\tvar parent = elem.parentNode;\n\t\treturn parent && parent.nodeType !== 11 ? parent : null;\n\t},\n\tparents: function( elem ) {\n\t\treturn dir( elem, \"parentNode\" );\n\t},\n\tparentsUntil: function( elem, _i, until ) {\n\t\treturn dir( elem, \"parentNode\", until );\n\t},\n\tnext: function( elem ) {\n\t\treturn sibling( elem, \"nextSibling\" );\n\t},\n\tprev: function( elem ) {\n\t\treturn sibling( elem, \"previousSibling\" );\n\t},\n\tnextAll: function( elem ) {\n\t\treturn dir( elem, \"nextSibling\" );\n\t},\n\tprevAll: function( elem ) {\n\t\treturn dir( elem, \"previousSibling\" );\n\t},\n\tnextUntil: function( elem, _i, until ) {\n\t\treturn dir( elem, \"nextSibling\", until );\n\t},\n\tprevUntil: function( elem, _i, until ) {\n\t\treturn dir( elem, \"previousSibling\", until );\n\t},\n\tsiblings: function( elem ) {\n\t\treturn siblings( ( elem.parentNode || {} ).firstChild, elem );\n\t},\n\tchildren: function( elem ) {\n\t\treturn siblings( elem.firstChild );\n\t},\n\tcontents: function( elem ) {\n\t\tif ( elem.contentDocument != null &&\n\n\t\t\t// Support: IE 11+\n\t\t\t// elements with no `data` attribute has an object\n\t\t\t// `contentDocument` with a `null` prototype.\n\t\t\tgetProto( elem.contentDocument ) ) {\n\n\t\t\treturn elem.contentDocument;\n\t\t}\n\n\t\t// Support: IE 9 - 11 only, iOS 7 only, Android Browser <=4.3 only\n\t\t// Treat the template element as a regular one in browsers that\n\t\t// don't support it.\n\t\tif ( nodeName( elem, \"template\" ) ) {\n\t\t\telem = elem.content || elem;\n\t\t}\n\n\t\treturn jQuery.merge( [], elem.childNodes );\n\t}\n}, function( name, fn ) {\n\tjQuery.fn[ name ] = function( until, selector ) {\n\t\tvar matched = jQuery.map( this, fn, until );\n\n\t\tif ( name.slice( -5 ) !== \"Until\" ) {\n\t\t\tselector = until;\n\t\t}\n\n\t\tif ( selector && typeof selector === \"string\" ) {\n\t\t\tmatched = jQuery.filter( selector, matched );\n\t\t}\n\n\t\tif ( this.length > 1 ) {\n\n\t\t\t// Remove duplicates\n\t\t\tif ( !guaranteedUnique[ name ] ) {\n\t\t\t\tjQuery.uniqueSort( matched );\n\t\t\t}\n\n\t\t\t// Reverse order for parents* and prev-derivatives\n\t\t\tif ( rparentsprev.test( name ) ) {\n\t\t\t\tmatched.reverse();\n\t\t\t}\n\t\t}\n\n\t\treturn this.pushStack( matched );\n\t};\n} );\nvar rnothtmlwhite = ( /[^\\x20\\t\\r\\n\\f]+/g );\n\n\n\n// Convert String-formatted options into Object-formatted ones\nfunction createOptions( options ) {\n\tvar object = {};\n\tjQuery.each( options.match( rnothtmlwhite ) || [], function( _, flag ) {\n\t\tobject[ flag ] = true;\n\t} );\n\treturn object;\n}\n\n/*\n * Create a callback list using the following parameters:\n *\n *\toptions: an optional list of space-separated options that will change how\n *\t\t\tthe callback list behaves or a more traditional option object\n *\n * By default a callback list will act like an event callback list and can be\n * \"fired\" multiple times.\n *\n * Possible options:\n *\n *\tonce:\t\t\twill ensure the callback list can only be fired once (like a Deferred)\n *\n *\tmemory:\t\t\twill keep track of previous values and will call any callback added\n *\t\t\t\t\tafter the list has been fired right away with the latest \"memorized\"\n *\t\t\t\t\tvalues (like a Deferred)\n *\n *\tunique:\t\t\twill ensure a callback can only be added once (no duplicate in the list)\n *\n *\tstopOnFalse:\tinterrupt callings when a callback returns false\n *\n */\njQuery.Callbacks = function( options ) {\n\n\t// Convert options from String-formatted to Object-formatted if needed\n\t// (we check in cache first)\n\toptions = typeof options === \"string\" ?\n\t\tcreateOptions( options ) :\n\t\tjQuery.extend( {}, options );\n\n\tvar // Flag to know if list is currently firing\n\t\tfiring,\n\n\t\t// Last fire value for non-forgettable lists\n\t\tmemory,\n\n\t\t// Flag to know if list was already fired\n\t\tfired,\n\n\t\t// Flag to prevent firing\n\t\tlocked,\n\n\t\t// Actual callback list\n\t\tlist = [],\n\n\t\t// Queue of execution data for repeatable lists\n\t\tqueue = [],\n\n\t\t// Index of currently firing callback (modified by add/remove as needed)\n\t\tfiringIndex = -1,\n\n\t\t// Fire callbacks\n\t\tfire = function() {\n\n\t\t\t// Enforce single-firing\n\t\t\tlocked = locked || options.once;\n\n\t\t\t// Execute callbacks for all pending executions,\n\t\t\t// respecting firingIndex overrides and runtime changes\n\t\t\tfired = firing = true;\n\t\t\tfor ( ; queue.length; firingIndex = -1 ) {\n\t\t\t\tmemory = queue.shift();\n\t\t\t\twhile ( ++firingIndex < list.length ) {\n\n\t\t\t\t\t// Run callback and check for early termination\n\t\t\t\t\tif ( list[ firingIndex ].apply( memory[ 0 ], memory[ 1 ] ) === false &&\n\t\t\t\t\t\toptions.stopOnFalse ) {\n\n\t\t\t\t\t\t// Jump to end and forget the data so .add doesn't re-fire\n\t\t\t\t\t\tfiringIndex = list.length;\n\t\t\t\t\t\tmemory = false;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Forget the data if we're done with it\n\t\t\tif ( !options.memory ) {\n\t\t\t\tmemory = false;\n\t\t\t}\n\n\t\t\tfiring = false;\n\n\t\t\t// Clean up if we're done firing for good\n\t\t\tif ( locked ) {\n\n\t\t\t\t// Keep an empty list if we have data for future add calls\n\t\t\t\tif ( memory ) {\n\t\t\t\t\tlist = [];\n\n\t\t\t\t// Otherwise, this object is spent\n\t\t\t\t} else {\n\t\t\t\t\tlist = \"\";\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\n\t\t// Actual Callbacks object\n\t\tself = {\n\n\t\t\t// Add a callback or a collection of callbacks to the list\n\t\t\tadd: function() {\n\t\t\t\tif ( list ) {\n\n\t\t\t\t\t// If we have memory from a past run, we should fire after adding\n\t\t\t\t\tif ( memory && !firing ) {\n\t\t\t\t\t\tfiringIndex = list.length - 1;\n\t\t\t\t\t\tqueue.push( memory );\n\t\t\t\t\t}\n\n\t\t\t\t\t( function add( args ) {\n\t\t\t\t\t\tjQuery.each( args, function( _, arg ) {\n\t\t\t\t\t\t\tif ( isFunction( arg ) ) {\n\t\t\t\t\t\t\t\tif ( !options.unique || !self.has( arg ) ) {\n\t\t\t\t\t\t\t\t\tlist.push( arg );\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t} else if ( arg && arg.length && toType( arg ) !== \"string\" ) {\n\n\t\t\t\t\t\t\t\t// Inspect recursively\n\t\t\t\t\t\t\t\tadd( arg );\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t} );\n\t\t\t\t\t} )( arguments );\n\n\t\t\t\t\tif ( memory && !firing ) {\n\t\t\t\t\t\tfire();\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\treturn this;\n\t\t\t},\n\n\t\t\t// Remove a callback from the list\n\t\t\tremove: function() {\n\t\t\t\tjQuery.each( arguments, function( _, arg ) {\n\t\t\t\t\tvar index;\n\t\t\t\t\twhile ( ( index = jQuery.inArray( arg, list, index ) ) > -1 ) {\n\t\t\t\t\t\tlist.splice( index, 1 );\n\n\t\t\t\t\t\t// Handle firing indexes\n\t\t\t\t\t\tif ( index <= firingIndex ) {\n\t\t\t\t\t\t\tfiringIndex--;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t} );\n\t\t\t\treturn this;\n\t\t\t},\n\n\t\t\t// Check if a given callback is in the list.\n\t\t\t// If no argument is given, return whether or not list has callbacks attached.\n\t\t\thas: function( fn ) {\n\t\t\t\treturn fn ?\n\t\t\t\t\tjQuery.inArray( fn, list ) > -1 :\n\t\t\t\t\tlist.length > 0;\n\t\t\t},\n\n\t\t\t// Remove all callbacks from the list\n\t\t\tempty: function() {\n\t\t\t\tif ( list ) {\n\t\t\t\t\tlist = [];\n\t\t\t\t}\n\t\t\t\treturn this;\n\t\t\t},\n\n\t\t\t// Disable .fire and .add\n\t\t\t// Abort any current/pending executions\n\t\t\t// Clear all callbacks and values\n\t\t\tdisable: function() {\n\t\t\t\tlocked = queue = [];\n\t\t\t\tlist = memory = \"\";\n\t\t\t\treturn this;\n\t\t\t},\n\t\t\tdisabled: function() {\n\t\t\t\treturn !list;\n\t\t\t},\n\n\t\t\t// Disable .fire\n\t\t\t// Also disable .add unless we have memory (since it would have no effect)\n\t\t\t// Abort any pending executions\n\t\t\tlock: function() {\n\t\t\t\tlocked = queue = [];\n\t\t\t\tif ( !memory && !firing ) {\n\t\t\t\t\tlist = memory = \"\";\n\t\t\t\t}\n\t\t\t\treturn this;\n\t\t\t},\n\t\t\tlocked: function() {\n\t\t\t\treturn !!locked;\n\t\t\t},\n\n\t\t\t// Call all callbacks with the given context and arguments\n\t\t\tfireWith: function( context, args ) {\n\t\t\t\tif ( !locked ) {\n\t\t\t\t\targs = args || [];\n\t\t\t\t\targs = [ context, args.slice ? args.slice() : args ];\n\t\t\t\t\tqueue.push( args );\n\t\t\t\t\tif ( !firing ) {\n\t\t\t\t\t\tfire();\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\treturn this;\n\t\t\t},\n\n\t\t\t// Call all the callbacks with the given arguments\n\t\t\tfire: function() {\n\t\t\t\tself.fireWith( this, arguments );\n\t\t\t\treturn this;\n\t\t\t},\n\n\t\t\t// To know if the callbacks have already been called at least once\n\t\t\tfired: function() {\n\t\t\t\treturn !!fired;\n\t\t\t}\n\t\t};\n\n\treturn self;\n};\n\n\nfunction Identity( v ) {\n\treturn v;\n}\nfunction Thrower( ex ) {\n\tthrow ex;\n}\n\nfunction adoptValue( value, resolve, reject, noValue ) {\n\tvar method;\n\n\ttry {\n\n\t\t// Check for promise aspect first to privilege synchronous behavior\n\t\tif ( value && isFunction( ( method = value.promise ) ) ) {\n\t\t\tmethod.call( value ).done( resolve ).fail( reject );\n\n\t\t// Other thenables\n\t\t} else if ( value && isFunction( ( method = value.then ) ) ) {\n\t\t\tmethod.call( value, resolve, reject );\n\n\t\t// Other non-thenables\n\t\t} else {\n\n\t\t\t// Control `resolve` arguments by letting Array#slice cast boolean `noValue` to integer:\n\t\t\t// * false: [ value ].slice( 0 ) => resolve( value )\n\t\t\t// * true: [ value ].slice( 1 ) => resolve()\n\t\t\tresolve.apply( undefined, [ value ].slice( noValue ) );\n\t\t}\n\n\t// For Promises/A+, convert exceptions into rejections\n\t// Since jQuery.when doesn't unwrap thenables, we can skip the extra checks appearing in\n\t// Deferred#then to conditionally suppress rejection.\n\t} catch ( value ) {\n\n\t\t// Support: Android 4.0 only\n\t\t// Strict mode functions invoked without .call/.apply get global-object context\n\t\treject.apply( undefined, [ value ] );\n\t}\n}\n\njQuery.extend( {\n\n\tDeferred: function( func ) {\n\t\tvar tuples = [\n\n\t\t\t\t// action, add listener, callbacks,\n\t\t\t\t// ... .then handlers, argument index, [final state]\n\t\t\t\t[ \"notify\", \"progress\", jQuery.Callbacks( \"memory\" ),\n\t\t\t\t\tjQuery.Callbacks( \"memory\" ), 2 ],\n\t\t\t\t[ \"resolve\", \"done\", jQuery.Callbacks( \"once memory\" ),\n\t\t\t\t\tjQuery.Callbacks( \"once memory\" ), 0, \"resolved\" ],\n\t\t\t\t[ \"reject\", \"fail\", jQuery.Callbacks( \"once memory\" ),\n\t\t\t\t\tjQuery.Callbacks( \"once memory\" ), 1, \"rejected\" ]\n\t\t\t],\n\t\t\tstate = \"pending\",\n\t\t\tpromise = {\n\t\t\t\tstate: function() {\n\t\t\t\t\treturn state;\n\t\t\t\t},\n\t\t\t\talways: function() {\n\t\t\t\t\tdeferred.done( arguments ).fail( arguments );\n\t\t\t\t\treturn this;\n\t\t\t\t},\n\t\t\t\t\"catch\": function( fn ) {\n\t\t\t\t\treturn promise.then( null, fn );\n\t\t\t\t},\n\n\t\t\t\t// Keep pipe for back-compat\n\t\t\t\tpipe: function( /* fnDone, fnFail, fnProgress */ ) {\n\t\t\t\t\tvar fns = arguments;\n\n\t\t\t\t\treturn jQuery.Deferred( function( newDefer ) {\n\t\t\t\t\t\tjQuery.each( tuples, function( _i, tuple ) {\n\n\t\t\t\t\t\t\t// Map tuples (progress, done, fail) to arguments (done, fail, progress)\n\t\t\t\t\t\t\tvar fn = isFunction( fns[ tuple[ 4 ] ] ) && fns[ tuple[ 4 ] ];\n\n\t\t\t\t\t\t\t// deferred.progress(function() { bind to newDefer or newDefer.notify })\n\t\t\t\t\t\t\t// deferred.done(function() { bind to newDefer or newDefer.resolve })\n\t\t\t\t\t\t\t// deferred.fail(function() { bind to newDefer or newDefer.reject })\n\t\t\t\t\t\t\tdeferred[ tuple[ 1 ] ]( function() {\n\t\t\t\t\t\t\t\tvar returned = fn && fn.apply( this, arguments );\n\t\t\t\t\t\t\t\tif ( returned && isFunction( returned.promise ) ) {\n\t\t\t\t\t\t\t\t\treturned.promise()\n\t\t\t\t\t\t\t\t\t\t.progress( newDefer.notify )\n\t\t\t\t\t\t\t\t\t\t.done( newDefer.resolve )\n\t\t\t\t\t\t\t\t\t\t.fail( newDefer.reject );\n\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\tnewDefer[ tuple[ 0 ] + \"With\" ](\n\t\t\t\t\t\t\t\t\t\tthis,\n\t\t\t\t\t\t\t\t\t\tfn ? [ returned ] : arguments\n\t\t\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t} );\n\t\t\t\t\t\t} );\n\t\t\t\t\t\tfns = null;\n\t\t\t\t\t} ).promise();\n\t\t\t\t},\n\t\t\t\tthen: function( onFulfilled, onRejected, onProgress ) {\n\t\t\t\t\tvar maxDepth = 0;\n\t\t\t\t\tfunction resolve( depth, deferred, handler, special ) {\n\t\t\t\t\t\treturn function() {\n\t\t\t\t\t\t\tvar that = this,\n\t\t\t\t\t\t\t\targs = arguments,\n\t\t\t\t\t\t\t\tmightThrow = function() {\n\t\t\t\t\t\t\t\t\tvar returned, then;\n\n\t\t\t\t\t\t\t\t\t// Support: Promises/A+ section 2.3.3.3.3\n\t\t\t\t\t\t\t\t\t// https://promisesaplus.com/#point-59\n\t\t\t\t\t\t\t\t\t// Ignore double-resolution attempts\n\t\t\t\t\t\t\t\t\tif ( depth < maxDepth ) {\n\t\t\t\t\t\t\t\t\t\treturn;\n\t\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t\treturned = handler.apply( that, args );\n\n\t\t\t\t\t\t\t\t\t// Support: Promises/A+ section 2.3.1\n\t\t\t\t\t\t\t\t\t// https://promisesaplus.com/#point-48\n\t\t\t\t\t\t\t\t\tif ( returned === deferred.promise() ) {\n\t\t\t\t\t\t\t\t\t\tthrow new TypeError( \"Thenable self-resolution\" );\n\t\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t\t// Support: Promises/A+ sections 2.3.3.1, 3.5\n\t\t\t\t\t\t\t\t\t// https://promisesaplus.com/#point-54\n\t\t\t\t\t\t\t\t\t// https://promisesaplus.com/#point-75\n\t\t\t\t\t\t\t\t\t// Retrieve `then` only once\n\t\t\t\t\t\t\t\t\tthen = returned &&\n\n\t\t\t\t\t\t\t\t\t\t// Support: Promises/A+ section 2.3.4\n\t\t\t\t\t\t\t\t\t\t// https://promisesaplus.com/#point-64\n\t\t\t\t\t\t\t\t\t\t// Only check objects and functions for thenability\n\t\t\t\t\t\t\t\t\t\t( typeof returned === \"object\" ||\n\t\t\t\t\t\t\t\t\t\t\ttypeof returned === \"function\" ) &&\n\t\t\t\t\t\t\t\t\t\treturned.then;\n\n\t\t\t\t\t\t\t\t\t// Handle a returned thenable\n\t\t\t\t\t\t\t\t\tif ( isFunction( then ) ) {\n\n\t\t\t\t\t\t\t\t\t\t// Special processors (notify) just wait for resolution\n\t\t\t\t\t\t\t\t\t\tif ( special ) {\n\t\t\t\t\t\t\t\t\t\t\tthen.call(\n\t\t\t\t\t\t\t\t\t\t\t\treturned,\n\t\t\t\t\t\t\t\t\t\t\t\tresolve( maxDepth, deferred, Identity, special ),\n\t\t\t\t\t\t\t\t\t\t\t\tresolve( maxDepth, deferred, Thrower, special )\n\t\t\t\t\t\t\t\t\t\t\t);\n\n\t\t\t\t\t\t\t\t\t\t// Normal processors (resolve) also hook into progress\n\t\t\t\t\t\t\t\t\t\t} else {\n\n\t\t\t\t\t\t\t\t\t\t\t// ...and disregard older resolution values\n\t\t\t\t\t\t\t\t\t\t\tmaxDepth++;\n\n\t\t\t\t\t\t\t\t\t\t\tthen.call(\n\t\t\t\t\t\t\t\t\t\t\t\treturned,\n\t\t\t\t\t\t\t\t\t\t\t\tresolve( maxDepth, deferred, Identity, special ),\n\t\t\t\t\t\t\t\t\t\t\t\tresolve( maxDepth, deferred, Thrower, special ),\n\t\t\t\t\t\t\t\t\t\t\t\tresolve( maxDepth, deferred, Identity,\n\t\t\t\t\t\t\t\t\t\t\t\t\tdeferred.notifyWith )\n\t\t\t\t\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t\t// Handle all other returned values\n\t\t\t\t\t\t\t\t\t} else {\n\n\t\t\t\t\t\t\t\t\t\t// Only substitute handlers pass on context\n\t\t\t\t\t\t\t\t\t\t// and multiple values (non-spec behavior)\n\t\t\t\t\t\t\t\t\t\tif ( handler !== Identity ) {\n\t\t\t\t\t\t\t\t\t\t\tthat = undefined;\n\t\t\t\t\t\t\t\t\t\t\targs = [ returned ];\n\t\t\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t\t\t// Process the value(s)\n\t\t\t\t\t\t\t\t\t\t// Default process is resolve\n\t\t\t\t\t\t\t\t\t\t( special || deferred.resolveWith )( that, args );\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t},\n\n\t\t\t\t\t\t\t\t// Only normal processors (resolve) catch and reject exceptions\n\t\t\t\t\t\t\t\tprocess = special ?\n\t\t\t\t\t\t\t\t\tmightThrow :\n\t\t\t\t\t\t\t\t\tfunction() {\n\t\t\t\t\t\t\t\t\t\ttry {\n\t\t\t\t\t\t\t\t\t\t\tmightThrow();\n\t\t\t\t\t\t\t\t\t\t} catch ( e ) {\n\n\t\t\t\t\t\t\t\t\t\t\tif ( jQuery.Deferred.exceptionHook ) {\n\t\t\t\t\t\t\t\t\t\t\t\tjQuery.Deferred.exceptionHook( e,\n\t\t\t\t\t\t\t\t\t\t\t\t\tprocess.stackTrace );\n\t\t\t\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t\t\t\t// Support: Promises/A+ section 2.3.3.3.4.1\n\t\t\t\t\t\t\t\t\t\t\t// https://promisesaplus.com/#point-61\n\t\t\t\t\t\t\t\t\t\t\t// Ignore post-resolution exceptions\n\t\t\t\t\t\t\t\t\t\t\tif ( depth + 1 >= maxDepth ) {\n\n\t\t\t\t\t\t\t\t\t\t\t\t// Only substitute handlers pass on context\n\t\t\t\t\t\t\t\t\t\t\t\t// and multiple values (non-spec behavior)\n\t\t\t\t\t\t\t\t\t\t\t\tif ( handler !== Thrower ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\tthat = undefined;\n\t\t\t\t\t\t\t\t\t\t\t\t\targs = [ e ];\n\t\t\t\t\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t\t\t\t\tdeferred.rejectWith( that, args );\n\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t};\n\n\t\t\t\t\t\t\t// Support: Promises/A+ section 2.3.3.3.1\n\t\t\t\t\t\t\t// https://promisesaplus.com/#point-57\n\t\t\t\t\t\t\t// Re-resolve promises immediately to dodge false rejection from\n\t\t\t\t\t\t\t// subsequent errors\n\t\t\t\t\t\t\tif ( depth ) {\n\t\t\t\t\t\t\t\tprocess();\n\t\t\t\t\t\t\t} else {\n\n\t\t\t\t\t\t\t\t// Call an optional hook to record the stack, in case of exception\n\t\t\t\t\t\t\t\t// since it's otherwise lost when execution goes async\n\t\t\t\t\t\t\t\tif ( jQuery.Deferred.getStackHook ) {\n\t\t\t\t\t\t\t\t\tprocess.stackTrace = jQuery.Deferred.getStackHook();\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\twindow.setTimeout( process );\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t};\n\t\t\t\t\t}\n\n\t\t\t\t\treturn jQuery.Deferred( function( newDefer ) {\n\n\t\t\t\t\t\t// progress_handlers.add( ... )\n\t\t\t\t\t\ttuples[ 0 ][ 3 ].add(\n\t\t\t\t\t\t\tresolve(\n\t\t\t\t\t\t\t\t0,\n\t\t\t\t\t\t\t\tnewDefer,\n\t\t\t\t\t\t\t\tisFunction( onProgress ) ?\n\t\t\t\t\t\t\t\t\tonProgress :\n\t\t\t\t\t\t\t\t\tIdentity,\n\t\t\t\t\t\t\t\tnewDefer.notifyWith\n\t\t\t\t\t\t\t)\n\t\t\t\t\t\t);\n\n\t\t\t\t\t\t// fulfilled_handlers.add( ... )\n\t\t\t\t\t\ttuples[ 1 ][ 3 ].add(\n\t\t\t\t\t\t\tresolve(\n\t\t\t\t\t\t\t\t0,\n\t\t\t\t\t\t\t\tnewDefer,\n\t\t\t\t\t\t\t\tisFunction( onFulfilled ) ?\n\t\t\t\t\t\t\t\t\tonFulfilled :\n\t\t\t\t\t\t\t\t\tIdentity\n\t\t\t\t\t\t\t)\n\t\t\t\t\t\t);\n\n\t\t\t\t\t\t// rejected_handlers.add( ... )\n\t\t\t\t\t\ttuples[ 2 ][ 3 ].add(\n\t\t\t\t\t\t\tresolve(\n\t\t\t\t\t\t\t\t0,\n\t\t\t\t\t\t\t\tnewDefer,\n\t\t\t\t\t\t\t\tisFunction( onRejected ) ?\n\t\t\t\t\t\t\t\t\tonRejected :\n\t\t\t\t\t\t\t\t\tThrower\n\t\t\t\t\t\t\t)\n\t\t\t\t\t\t);\n\t\t\t\t\t} ).promise();\n\t\t\t\t},\n\n\t\t\t\t// Get a promise for this deferred\n\t\t\t\t// If obj is provided, the promise aspect is added to the object\n\t\t\t\tpromise: function( obj ) {\n\t\t\t\t\treturn obj != null ? jQuery.extend( obj, promise ) : promise;\n\t\t\t\t}\n\t\t\t},\n\t\t\tdeferred = {};\n\n\t\t// Add list-specific methods\n\t\tjQuery.each( tuples, function( i, tuple ) {\n\t\t\tvar list = tuple[ 2 ],\n\t\t\t\tstateString = tuple[ 5 ];\n\n\t\t\t// promise.progress = list.add\n\t\t\t// promise.done = list.add\n\t\t\t// promise.fail = list.add\n\t\t\tpromise[ tuple[ 1 ] ] = list.add;\n\n\t\t\t// Handle state\n\t\t\tif ( stateString ) {\n\t\t\t\tlist.add(\n\t\t\t\t\tfunction() {\n\n\t\t\t\t\t\t// state = \"resolved\" (i.e., fulfilled)\n\t\t\t\t\t\t// state = \"rejected\"\n\t\t\t\t\t\tstate = stateString;\n\t\t\t\t\t},\n\n\t\t\t\t\t// rejected_callbacks.disable\n\t\t\t\t\t// fulfilled_callbacks.disable\n\t\t\t\t\ttuples[ 3 - i ][ 2 ].disable,\n\n\t\t\t\t\t// rejected_handlers.disable\n\t\t\t\t\t// fulfilled_handlers.disable\n\t\t\t\t\ttuples[ 3 - i ][ 3 ].disable,\n\n\t\t\t\t\t// progress_callbacks.lock\n\t\t\t\t\ttuples[ 0 ][ 2 ].lock,\n\n\t\t\t\t\t// progress_handlers.lock\n\t\t\t\t\ttuples[ 0 ][ 3 ].lock\n\t\t\t\t);\n\t\t\t}\n\n\t\t\t// progress_handlers.fire\n\t\t\t// fulfilled_handlers.fire\n\t\t\t// rejected_handlers.fire\n\t\t\tlist.add( tuple[ 3 ].fire );\n\n\t\t\t// deferred.notify = function() { deferred.notifyWith(...) }\n\t\t\t// deferred.resolve = function() { deferred.resolveWith(...) }\n\t\t\t// deferred.reject = function() { deferred.rejectWith(...) }\n\t\t\tdeferred[ tuple[ 0 ] ] = function() {\n\t\t\t\tdeferred[ tuple[ 0 ] + \"With\" ]( this === deferred ? undefined : this, arguments );\n\t\t\t\treturn this;\n\t\t\t};\n\n\t\t\t// deferred.notifyWith = list.fireWith\n\t\t\t// deferred.resolveWith = list.fireWith\n\t\t\t// deferred.rejectWith = list.fireWith\n\t\t\tdeferred[ tuple[ 0 ] + \"With\" ] = list.fireWith;\n\t\t} );\n\n\t\t// Make the deferred a promise\n\t\tpromise.promise( deferred );\n\n\t\t// Call given func if any\n\t\tif ( func ) {\n\t\t\tfunc.call( deferred, deferred );\n\t\t}\n\n\t\t// All done!\n\t\treturn deferred;\n\t},\n\n\t// Deferred helper\n\twhen: function( singleValue ) {\n\t\tvar\n\n\t\t\t// count of uncompleted subordinates\n\t\t\tremaining = arguments.length,\n\n\t\t\t// count of unprocessed arguments\n\t\t\ti = remaining,\n\n\t\t\t// subordinate fulfillment data\n\t\t\tresolveContexts = Array( i ),\n\t\t\tresolveValues = slice.call( arguments ),\n\n\t\t\t// the primary Deferred\n\t\t\tprimary = jQuery.Deferred(),\n\n\t\t\t// subordinate callback factory\n\t\t\tupdateFunc = function( i ) {\n\t\t\t\treturn function( value ) {\n\t\t\t\t\tresolveContexts[ i ] = this;\n\t\t\t\t\tresolveValues[ i ] = arguments.length > 1 ? slice.call( arguments ) : value;\n\t\t\t\t\tif ( !( --remaining ) ) {\n\t\t\t\t\t\tprimary.resolveWith( resolveContexts, resolveValues );\n\t\t\t\t\t}\n\t\t\t\t};\n\t\t\t};\n\n\t\t// Single- and empty arguments are adopted like Promise.resolve\n\t\tif ( remaining <= 1 ) {\n\t\t\tadoptValue( singleValue, primary.done( updateFunc( i ) ).resolve, primary.reject,\n\t\t\t\t!remaining );\n\n\t\t\t// Use .then() to unwrap secondary thenables (cf. gh-3000)\n\t\t\tif ( primary.state() === \"pending\" ||\n\t\t\t\tisFunction( resolveValues[ i ] && resolveValues[ i ].then ) ) {\n\n\t\t\t\treturn primary.then();\n\t\t\t}\n\t\t}\n\n\t\t// Multiple arguments are aggregated like Promise.all array elements\n\t\twhile ( i-- ) {\n\t\t\tadoptValue( resolveValues[ i ], updateFunc( i ), primary.reject );\n\t\t}\n\n\t\treturn primary.promise();\n\t}\n} );\n\n\n// These usually indicate a programmer mistake during development,\n// warn about them ASAP rather than swallowing them by default.\nvar rerrorNames = /^(Eval|Internal|Range|Reference|Syntax|Type|URI)Error$/;\n\njQuery.Deferred.exceptionHook = function( error, stack ) {\n\n\t// Support: IE 8 - 9 only\n\t// Console exists when dev tools are open, which can happen at any time\n\tif ( window.console && window.console.warn && error && rerrorNames.test( error.name ) ) {\n\t\twindow.console.warn( \"jQuery.Deferred exception: \" + error.message, error.stack, stack );\n\t}\n};\n\n\n\n\njQuery.readyException = function( error ) {\n\twindow.setTimeout( function() {\n\t\tthrow error;\n\t} );\n};\n\n\n\n\n// The deferred used on DOM ready\nvar readyList = jQuery.Deferred();\n\njQuery.fn.ready = function( fn ) {\n\n\treadyList\n\t\t.then( fn )\n\n\t\t// Wrap jQuery.readyException in a function so that the lookup\n\t\t// happens at the time of error handling instead of callback\n\t\t// registration.\n\t\t.catch( function( error ) {\n\t\t\tjQuery.readyException( error );\n\t\t} );\n\n\treturn this;\n};\n\njQuery.extend( {\n\n\t// Is the DOM ready to be used? Set to true once it occurs.\n\tisReady: false,\n\n\t// A counter to track how many items to wait for before\n\t// the ready event fires. See #6781\n\treadyWait: 1,\n\n\t// Handle when the DOM is ready\n\tready: function( wait ) {\n\n\t\t// Abort if there are pending holds or we're already ready\n\t\tif ( wait === true ? --jQuery.readyWait : jQuery.isReady ) {\n\t\t\treturn;\n\t\t}\n\n\t\t// Remember that the DOM is ready\n\t\tjQuery.isReady = true;\n\n\t\t// If a normal DOM Ready event fired, decrement, and wait if need be\n\t\tif ( wait !== true && --jQuery.readyWait > 0 ) {\n\t\t\treturn;\n\t\t}\n\n\t\t// If there are functions bound, to execute\n\t\treadyList.resolveWith( document, [ jQuery ] );\n\t}\n} );\n\njQuery.ready.then = readyList.then;\n\n// The ready event handler and self cleanup method\nfunction completed() {\n\tdocument.removeEventListener( \"DOMContentLoaded\", completed );\n\twindow.removeEventListener( \"load\", completed );\n\tjQuery.ready();\n}\n\n// Catch cases where $(document).ready() is called\n// after the browser event has already occurred.\n// Support: IE <=9 - 10 only\n// Older IE sometimes signals \"interactive\" too soon\nif ( document.readyState === \"complete\" ||\n\t( document.readyState !== \"loading\" && !document.documentElement.doScroll ) ) {\n\n\t// Handle it asynchronously to allow scripts the opportunity to delay ready\n\twindow.setTimeout( jQuery.ready );\n\n} else {\n\n\t// Use the handy event callback\n\tdocument.addEventListener( \"DOMContentLoaded\", completed );\n\n\t// A fallback to window.onload, that will always work\n\twindow.addEventListener( \"load\", completed );\n}\n\n\n\n\n// Multifunctional method to get and set values of a collection\n// The value/s can optionally be executed if it's a function\nvar access = function( elems, fn, key, value, chainable, emptyGet, raw ) {\n\tvar i = 0,\n\t\tlen = elems.length,\n\t\tbulk = key == null;\n\n\t// Sets many values\n\tif ( toType( key ) === \"object\" ) {\n\t\tchainable = true;\n\t\tfor ( i in key ) {\n\t\t\taccess( elems, fn, i, key[ i ], true, emptyGet, raw );\n\t\t}\n\n\t// Sets one value\n\t} else if ( value !== undefined ) {\n\t\tchainable = true;\n\n\t\tif ( !isFunction( value ) ) {\n\t\t\traw = true;\n\t\t}\n\n\t\tif ( bulk ) {\n\n\t\t\t// Bulk operations run against the entire set\n\t\t\tif ( raw ) {\n\t\t\t\tfn.call( elems, value );\n\t\t\t\tfn = null;\n\n\t\t\t// ...except when executing function values\n\t\t\t} else {\n\t\t\t\tbulk = fn;\n\t\t\t\tfn = function( elem, _key, value ) {\n\t\t\t\t\treturn bulk.call( jQuery( elem ), value );\n\t\t\t\t};\n\t\t\t}\n\t\t}\n\n\t\tif ( fn ) {\n\t\t\tfor ( ; i < len; i++ ) {\n\t\t\t\tfn(\n\t\t\t\t\telems[ i ], key, raw ?\n\t\t\t\t\t\tvalue :\n\t\t\t\t\t\tvalue.call( elems[ i ], i, fn( elems[ i ], key ) )\n\t\t\t\t);\n\t\t\t}\n\t\t}\n\t}\n\n\tif ( chainable ) {\n\t\treturn elems;\n\t}\n\n\t// Gets\n\tif ( bulk ) {\n\t\treturn fn.call( elems );\n\t}\n\n\treturn len ? fn( elems[ 0 ], key ) : emptyGet;\n};\n\n\n// Matches dashed string for camelizing\nvar rmsPrefix = /^-ms-/,\n\trdashAlpha = /-([a-z])/g;\n\n// Used by camelCase as callback to replace()\nfunction fcamelCase( _all, letter ) {\n\treturn letter.toUpperCase();\n}\n\n// Convert dashed to camelCase; used by the css and data modules\n// Support: IE <=9 - 11, Edge 12 - 15\n// Microsoft forgot to hump their vendor prefix (#9572)\nfunction camelCase( string ) {\n\treturn string.replace( rmsPrefix, \"ms-\" ).replace( rdashAlpha, fcamelCase );\n}\nvar acceptData = function( owner ) {\n\n\t// Accepts only:\n\t// - Node\n\t// - Node.ELEMENT_NODE\n\t// - Node.DOCUMENT_NODE\n\t// - Object\n\t// - Any\n\treturn owner.nodeType === 1 || owner.nodeType === 9 || !( +owner.nodeType );\n};\n\n\n\n\nfunction Data() {\n\tthis.expando = jQuery.expando + Data.uid++;\n}\n\nData.uid = 1;\n\nData.prototype = {\n\n\tcache: function( owner ) {\n\n\t\t// Check if the owner object already has a cache\n\t\tvar value = owner[ this.expando ];\n\n\t\t// If not, create one\n\t\tif ( !value ) {\n\t\t\tvalue = {};\n\n\t\t\t// We can accept data for non-element nodes in modern browsers,\n\t\t\t// but we should not, see #8335.\n\t\t\t// Always return an empty object.\n\t\t\tif ( acceptData( owner ) ) {\n\n\t\t\t\t// If it is a node unlikely to be stringify-ed or looped over\n\t\t\t\t// use plain assignment\n\t\t\t\tif ( owner.nodeType ) {\n\t\t\t\t\towner[ this.expando ] = value;\n\n\t\t\t\t// Otherwise secure it in a non-enumerable property\n\t\t\t\t// configurable must be true to allow the property to be\n\t\t\t\t// deleted when data is removed\n\t\t\t\t} else {\n\t\t\t\t\tObject.defineProperty( owner, this.expando, {\n\t\t\t\t\t\tvalue: value,\n\t\t\t\t\t\tconfigurable: true\n\t\t\t\t\t} );\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\treturn value;\n\t},\n\tset: function( owner, data, value ) {\n\t\tvar prop,\n\t\t\tcache = this.cache( owner );\n\n\t\t// Handle: [ owner, key, value ] args\n\t\t// Always use camelCase key (gh-2257)\n\t\tif ( typeof data === \"string\" ) {\n\t\t\tcache[ camelCase( data ) ] = value;\n\n\t\t// Handle: [ owner, { properties } ] args\n\t\t} else {\n\n\t\t\t// Copy the properties one-by-one to the cache object\n\t\t\tfor ( prop in data ) {\n\t\t\t\tcache[ camelCase( prop ) ] = data[ prop ];\n\t\t\t}\n\t\t}\n\t\treturn cache;\n\t},\n\tget: function( owner, key ) {\n\t\treturn key === undefined ?\n\t\t\tthis.cache( owner ) :\n\n\t\t\t// Always use camelCase key (gh-2257)\n\t\t\towner[ this.expando ] && owner[ this.expando ][ camelCase( key ) ];\n\t},\n\taccess: function( owner, key, value ) {\n\n\t\t// In cases where either:\n\t\t//\n\t\t// 1. No key was specified\n\t\t// 2. A string key was specified, but no value provided\n\t\t//\n\t\t// Take the \"read\" path and allow the get method to determine\n\t\t// which value to return, respectively either:\n\t\t//\n\t\t// 1. The entire cache object\n\t\t// 2. The data stored at the key\n\t\t//\n\t\tif ( key === undefined ||\n\t\t\t\t( ( key && typeof key === \"string\" ) && value === undefined ) ) {\n\n\t\t\treturn this.get( owner, key );\n\t\t}\n\n\t\t// When the key is not a string, or both a key and value\n\t\t// are specified, set or extend (existing objects) with either:\n\t\t//\n\t\t// 1. An object of properties\n\t\t// 2. A key and value\n\t\t//\n\t\tthis.set( owner, key, value );\n\n\t\t// Since the \"set\" path can have two possible entry points\n\t\t// return the expected data based on which path was taken[*]\n\t\treturn value !== undefined ? value : key;\n\t},\n\tremove: function( owner, key ) {\n\t\tvar i,\n\t\t\tcache = owner[ this.expando ];\n\n\t\tif ( cache === undefined ) {\n\t\t\treturn;\n\t\t}\n\n\t\tif ( key !== undefined ) {\n\n\t\t\t// Support array or space separated string of keys\n\t\t\tif ( Array.isArray( key ) ) {\n\n\t\t\t\t// If key is an array of keys...\n\t\t\t\t// We always set camelCase keys, so remove that.\n\t\t\t\tkey = key.map( camelCase );\n\t\t\t} else {\n\t\t\t\tkey = camelCase( key );\n\n\t\t\t\t// If a key with the spaces exists, use it.\n\t\t\t\t// Otherwise, create an array by matching non-whitespace\n\t\t\t\tkey = key in cache ?\n\t\t\t\t\t[ key ] :\n\t\t\t\t\t( key.match( rnothtmlwhite ) || [] );\n\t\t\t}\n\n\t\t\ti = key.length;\n\n\t\t\twhile ( i-- ) {\n\t\t\t\tdelete cache[ key[ i ] ];\n\t\t\t}\n\t\t}\n\n\t\t// Remove the expando if there's no more data\n\t\tif ( key === undefined || jQuery.isEmptyObject( cache ) ) {\n\n\t\t\t// Support: Chrome <=35 - 45\n\t\t\t// Webkit & Blink performance suffers when deleting properties\n\t\t\t// from DOM nodes, so set to undefined instead\n\t\t\t// https://bugs.chromium.org/p/chromium/issues/detail?id=378607 (bug restricted)\n\t\t\tif ( owner.nodeType ) {\n\t\t\t\towner[ this.expando ] = undefined;\n\t\t\t} else {\n\t\t\t\tdelete owner[ this.expando ];\n\t\t\t}\n\t\t}\n\t},\n\thasData: function( owner ) {\n\t\tvar cache = owner[ this.expando ];\n\t\treturn cache !== undefined && !jQuery.isEmptyObject( cache );\n\t}\n};\nvar dataPriv = new Data();\n\nvar dataUser = new Data();\n\n\n\n//\tImplementation Summary\n//\n//\t1. Enforce API surface and semantic compatibility with 1.9.x branch\n//\t2. Improve the module's maintainability by reducing the storage\n//\t\tpaths to a single mechanism.\n//\t3. Use the same single mechanism to support \"private\" and \"user\" data.\n//\t4. _Never_ expose \"private\" data to user code (TODO: Drop _data, _removeData)\n//\t5. Avoid exposing implementation details on user objects (eg. expando properties)\n//\t6. Provide a clear path for implementation upgrade to WeakMap in 2014\n\nvar rbrace = /^(?:\\{[\\w\\W]*\\}|\\[[\\w\\W]*\\])$/,\n\trmultiDash = /[A-Z]/g;\n\nfunction getData( data ) {\n\tif ( data === \"true\" ) {\n\t\treturn true;\n\t}\n\n\tif ( data === \"false\" ) {\n\t\treturn false;\n\t}\n\n\tif ( data === \"null\" ) {\n\t\treturn null;\n\t}\n\n\t// Only convert to a number if it doesn't change the string\n\tif ( data === +data + \"\" ) {\n\t\treturn +data;\n\t}\n\n\tif ( rbrace.test( data ) ) {\n\t\treturn JSON.parse( data );\n\t}\n\n\treturn data;\n}\n\nfunction dataAttr( elem, key, data ) {\n\tvar name;\n\n\t// If nothing was found internally, try to fetch any\n\t// data from the HTML5 data-* attribute\n\tif ( data === undefined && elem.nodeType === 1 ) {\n\t\tname = \"data-\" + key.replace( rmultiDash, \"-$&\" ).toLowerCase();\n\t\tdata = elem.getAttribute( name );\n\n\t\tif ( typeof data === \"string\" ) {\n\t\t\ttry {\n\t\t\t\tdata = getData( data );\n\t\t\t} catch ( e ) {}\n\n\t\t\t// Make sure we set the data so it isn't changed later\n\t\t\tdataUser.set( elem, key, data );\n\t\t} else {\n\t\t\tdata = undefined;\n\t\t}\n\t}\n\treturn data;\n}\n\njQuery.extend( {\n\thasData: function( elem ) {\n\t\treturn dataUser.hasData( elem ) || dataPriv.hasData( elem );\n\t},\n\n\tdata: function( elem, name, data ) {\n\t\treturn dataUser.access( elem, name, data );\n\t},\n\n\tremoveData: function( elem, name ) {\n\t\tdataUser.remove( elem, name );\n\t},\n\n\t// TODO: Now that all calls to _data and _removeData have been replaced\n\t// with direct calls to dataPriv methods, these can be deprecated.\n\t_data: function( elem, name, data ) {\n\t\treturn dataPriv.access( elem, name, data );\n\t},\n\n\t_removeData: function( elem, name ) {\n\t\tdataPriv.remove( elem, name );\n\t}\n} );\n\njQuery.fn.extend( {\n\tdata: function( key, value ) {\n\t\tvar i, name, data,\n\t\t\telem = this[ 0 ],\n\t\t\tattrs = elem && elem.attributes;\n\n\t\t// Gets all values\n\t\tif ( key === undefined ) {\n\t\t\tif ( this.length ) {\n\t\t\t\tdata = dataUser.get( elem );\n\n\t\t\t\tif ( elem.nodeType === 1 && !dataPriv.get( elem, \"hasDataAttrs\" ) ) {\n\t\t\t\t\ti = attrs.length;\n\t\t\t\t\twhile ( i-- ) {\n\n\t\t\t\t\t\t// Support: IE 11 only\n\t\t\t\t\t\t// The attrs elements can be null (#14894)\n\t\t\t\t\t\tif ( attrs[ i ] ) {\n\t\t\t\t\t\t\tname = attrs[ i ].name;\n\t\t\t\t\t\t\tif ( name.indexOf( \"data-\" ) === 0 ) {\n\t\t\t\t\t\t\t\tname = camelCase( name.slice( 5 ) );\n\t\t\t\t\t\t\t\tdataAttr( elem, name, data[ name ] );\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tdataPriv.set( elem, \"hasDataAttrs\", true );\n\t\t\t\t}\n\t\t\t}\n\n\t\t\treturn data;\n\t\t}\n\n\t\t// Sets multiple values\n\t\tif ( typeof key === \"object\" ) {\n\t\t\treturn this.each( function() {\n\t\t\t\tdataUser.set( this, key );\n\t\t\t} );\n\t\t}\n\n\t\treturn access( this, function( value ) {\n\t\t\tvar data;\n\n\t\t\t// The calling jQuery object (element matches) is not empty\n\t\t\t// (and therefore has an element appears at this[ 0 ]) and the\n\t\t\t// `value` parameter was not undefined. An empty jQuery object\n\t\t\t// will result in `undefined` for elem = this[ 0 ] which will\n\t\t\t// throw an exception if an attempt to read a data cache is made.\n\t\t\tif ( elem && value === undefined ) {\n\n\t\t\t\t// Attempt to get data from the cache\n\t\t\t\t// The key will always be camelCased in Data\n\t\t\t\tdata = dataUser.get( elem, key );\n\t\t\t\tif ( data !== undefined ) {\n\t\t\t\t\treturn data;\n\t\t\t\t}\n\n\t\t\t\t// Attempt to \"discover\" the data in\n\t\t\t\t// HTML5 custom data-* attrs\n\t\t\t\tdata = dataAttr( elem, key );\n\t\t\t\tif ( data !== undefined ) {\n\t\t\t\t\treturn data;\n\t\t\t\t}\n\n\t\t\t\t// We tried really hard, but the data doesn't exist.\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\t// Set the data...\n\t\t\tthis.each( function() {\n\n\t\t\t\t// We always store the camelCased key\n\t\t\t\tdataUser.set( this, key, value );\n\t\t\t} );\n\t\t}, null, value, arguments.length > 1, null, true );\n\t},\n\n\tremoveData: function( key ) {\n\t\treturn this.each( function() {\n\t\t\tdataUser.remove( this, key );\n\t\t} );\n\t}\n} );\n\n\njQuery.extend( {\n\tqueue: function( elem, type, data ) {\n\t\tvar queue;\n\n\t\tif ( elem ) {\n\t\t\ttype = ( type || \"fx\" ) + \"queue\";\n\t\t\tqueue = dataPriv.get( elem, type );\n\n\t\t\t// Speed up dequeue by getting out quickly if this is just a lookup\n\t\t\tif ( data ) {\n\t\t\t\tif ( !queue || Array.isArray( data ) ) {\n\t\t\t\t\tqueue = dataPriv.access( elem, type, jQuery.makeArray( data ) );\n\t\t\t\t} else {\n\t\t\t\t\tqueue.push( data );\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn queue || [];\n\t\t}\n\t},\n\n\tdequeue: function( elem, type ) {\n\t\ttype = type || \"fx\";\n\n\t\tvar queue = jQuery.queue( elem, type ),\n\t\t\tstartLength = queue.length,\n\t\t\tfn = queue.shift(),\n\t\t\thooks = jQuery._queueHooks( elem, type ),\n\t\t\tnext = function() {\n\t\t\t\tjQuery.dequeue( elem, type );\n\t\t\t};\n\n\t\t// If the fx queue is dequeued, always remove the progress sentinel\n\t\tif ( fn === \"inprogress\" ) {\n\t\t\tfn = queue.shift();\n\t\t\tstartLength--;\n\t\t}\n\n\t\tif ( fn ) {\n\n\t\t\t// Add a progress sentinel to prevent the fx queue from being\n\t\t\t// automatically dequeued\n\t\t\tif ( type === \"fx\" ) {\n\t\t\t\tqueue.unshift( \"inprogress\" );\n\t\t\t}\n\n\t\t\t// Clear up the last queue stop function\n\t\t\tdelete hooks.stop;\n\t\t\tfn.call( elem, next, hooks );\n\t\t}\n\n\t\tif ( !startLength && hooks ) {\n\t\t\thooks.empty.fire();\n\t\t}\n\t},\n\n\t// Not public - generate a queueHooks object, or return the current one\n\t_queueHooks: function( elem, type ) {\n\t\tvar key = type + \"queueHooks\";\n\t\treturn dataPriv.get( elem, key ) || dataPriv.access( elem, key, {\n\t\t\tempty: jQuery.Callbacks( \"once memory\" ).add( function() {\n\t\t\t\tdataPriv.remove( elem, [ type + \"queue\", key ] );\n\t\t\t} )\n\t\t} );\n\t}\n} );\n\njQuery.fn.extend( {\n\tqueue: function( type, data ) {\n\t\tvar setter = 2;\n\n\t\tif ( typeof type !== \"string\" ) {\n\t\t\tdata = type;\n\t\t\ttype = \"fx\";\n\t\t\tsetter--;\n\t\t}\n\n\t\tif ( arguments.length < setter ) {\n\t\t\treturn jQuery.queue( this[ 0 ], type );\n\t\t}\n\n\t\treturn data === undefined ?\n\t\t\tthis :\n\t\t\tthis.each( function() {\n\t\t\t\tvar queue = jQuery.queue( this, type, data );\n\n\t\t\t\t// Ensure a hooks for this queue\n\t\t\t\tjQuery._queueHooks( this, type );\n\n\t\t\t\tif ( type === \"fx\" && queue[ 0 ] !== \"inprogress\" ) {\n\t\t\t\t\tjQuery.dequeue( this, type );\n\t\t\t\t}\n\t\t\t} );\n\t},\n\tdequeue: function( type ) {\n\t\treturn this.each( function() {\n\t\t\tjQuery.dequeue( this, type );\n\t\t} );\n\t},\n\tclearQueue: function( type ) {\n\t\treturn this.queue( type || \"fx\", [] );\n\t},\n\n\t// Get a promise resolved when queues of a certain type\n\t// are emptied (fx is the type by default)\n\tpromise: function( type, obj ) {\n\t\tvar tmp,\n\t\t\tcount = 1,\n\t\t\tdefer = jQuery.Deferred(),\n\t\t\telements = this,\n\t\t\ti = this.length,\n\t\t\tresolve = function() {\n\t\t\t\tif ( !( --count ) ) {\n\t\t\t\t\tdefer.resolveWith( elements, [ elements ] );\n\t\t\t\t}\n\t\t\t};\n\n\t\tif ( typeof type !== \"string\" ) {\n\t\t\tobj = type;\n\t\t\ttype = undefined;\n\t\t}\n\t\ttype = type || \"fx\";\n\n\t\twhile ( i-- ) {\n\t\t\ttmp = dataPriv.get( elements[ i ], type + \"queueHooks\" );\n\t\t\tif ( tmp && tmp.empty ) {\n\t\t\t\tcount++;\n\t\t\t\ttmp.empty.add( resolve );\n\t\t\t}\n\t\t}\n\t\tresolve();\n\t\treturn defer.promise( obj );\n\t}\n} );\nvar pnum = ( /[+-]?(?:\\d*\\.|)\\d+(?:[eE][+-]?\\d+|)/ ).source;\n\nvar rcssNum = new RegExp( \"^(?:([+-])=|)(\" + pnum + \")([a-z%]*)$\", \"i\" );\n\n\nvar cssExpand = [ \"Top\", \"Right\", \"Bottom\", \"Left\" ];\n\nvar documentElement = document.documentElement;\n\n\n\n\tvar isAttached = function( elem ) {\n\t\t\treturn jQuery.contains( elem.ownerDocument, elem );\n\t\t},\n\t\tcomposed = { composed: true };\n\n\t// Support: IE 9 - 11+, Edge 12 - 18+, iOS 10.0 - 10.2 only\n\t// Check attachment across shadow DOM boundaries when possible (gh-3504)\n\t// Support: iOS 10.0-10.2 only\n\t// Early iOS 10 versions support `attachShadow` but not `getRootNode`,\n\t// leading to errors. We need to check for `getRootNode`.\n\tif ( documentElement.getRootNode ) {\n\t\tisAttached = function( elem ) {\n\t\t\treturn jQuery.contains( elem.ownerDocument, elem ) ||\n\t\t\t\telem.getRootNode( composed ) === elem.ownerDocument;\n\t\t};\n\t}\nvar isHiddenWithinTree = function( elem, el ) {\n\n\t\t// isHiddenWithinTree might be called from jQuery#filter function;\n\t\t// in that case, element will be second argument\n\t\telem = el || elem;\n\n\t\t// Inline style trumps all\n\t\treturn elem.style.display === \"none\" ||\n\t\t\telem.style.display === \"\" &&\n\n\t\t\t// Otherwise, check computed style\n\t\t\t// Support: Firefox <=43 - 45\n\t\t\t// Disconnected elements can have computed display: none, so first confirm that elem is\n\t\t\t// in the document.\n\t\t\tisAttached( elem ) &&\n\n\t\t\tjQuery.css( elem, \"display\" ) === \"none\";\n\t};\n\n\n\nfunction adjustCSS( elem, prop, valueParts, tween ) {\n\tvar adjusted, scale,\n\t\tmaxIterations = 20,\n\t\tcurrentValue = tween ?\n\t\t\tfunction() {\n\t\t\t\treturn tween.cur();\n\t\t\t} :\n\t\t\tfunction() {\n\t\t\t\treturn jQuery.css( elem, prop, \"\" );\n\t\t\t},\n\t\tinitial = currentValue(),\n\t\tunit = valueParts && valueParts[ 3 ] || ( jQuery.cssNumber[ prop ] ? \"\" : \"px\" ),\n\n\t\t// Starting value computation is required for potential unit mismatches\n\t\tinitialInUnit = elem.nodeType &&\n\t\t\t( jQuery.cssNumber[ prop ] || unit !== \"px\" && +initial ) &&\n\t\t\trcssNum.exec( jQuery.css( elem, prop ) );\n\n\tif ( initialInUnit && initialInUnit[ 3 ] !== unit ) {\n\n\t\t// Support: Firefox <=54\n\t\t// Halve the iteration target value to prevent interference from CSS upper bounds (gh-2144)\n\t\tinitial = initial / 2;\n\n\t\t// Trust units reported by jQuery.css\n\t\tunit = unit || initialInUnit[ 3 ];\n\n\t\t// Iteratively approximate from a nonzero starting point\n\t\tinitialInUnit = +initial || 1;\n\n\t\twhile ( maxIterations-- ) {\n\n\t\t\t// Evaluate and update our best guess (doubling guesses that zero out).\n\t\t\t// Finish if the scale equals or crosses 1 (making the old*new product non-positive).\n\t\t\tjQuery.style( elem, prop, initialInUnit + unit );\n\t\t\tif ( ( 1 - scale ) * ( 1 - ( scale = currentValue() / initial || 0.5 ) ) <= 0 ) {\n\t\t\t\tmaxIterations = 0;\n\t\t\t}\n\t\t\tinitialInUnit = initialInUnit / scale;\n\n\t\t}\n\n\t\tinitialInUnit = initialInUnit * 2;\n\t\tjQuery.style( elem, prop, initialInUnit + unit );\n\n\t\t// Make sure we update the tween properties later on\n\t\tvalueParts = valueParts || [];\n\t}\n\n\tif ( valueParts ) {\n\t\tinitialInUnit = +initialInUnit || +initial || 0;\n\n\t\t// Apply relative offset (+=/-=) if specified\n\t\tadjusted = valueParts[ 1 ] ?\n\t\t\tinitialInUnit + ( valueParts[ 1 ] + 1 ) * valueParts[ 2 ] :\n\t\t\t+valueParts[ 2 ];\n\t\tif ( tween ) {\n\t\t\ttween.unit = unit;\n\t\t\ttween.start = initialInUnit;\n\t\t\ttween.end = adjusted;\n\t\t}\n\t}\n\treturn adjusted;\n}\n\n\nvar defaultDisplayMap = {};\n\nfunction getDefaultDisplay( elem ) {\n\tvar temp,\n\t\tdoc = elem.ownerDocument,\n\t\tnodeName = elem.nodeName,\n\t\tdisplay = defaultDisplayMap[ nodeName ];\n\n\tif ( display ) {\n\t\treturn display;\n\t}\n\n\ttemp = doc.body.appendChild( doc.createElement( nodeName ) );\n\tdisplay = jQuery.css( temp, \"display\" );\n\n\ttemp.parentNode.removeChild( temp );\n\n\tif ( display === \"none\" ) {\n\t\tdisplay = \"block\";\n\t}\n\tdefaultDisplayMap[ nodeName ] = display;\n\n\treturn display;\n}\n\nfunction showHide( elements, show ) {\n\tvar display, elem,\n\t\tvalues = [],\n\t\tindex = 0,\n\t\tlength = elements.length;\n\n\t// Determine new display value for elements that need to change\n\tfor ( ; index < length; index++ ) {\n\t\telem = elements[ index ];\n\t\tif ( !elem.style ) {\n\t\t\tcontinue;\n\t\t}\n\n\t\tdisplay = elem.style.display;\n\t\tif ( show ) {\n\n\t\t\t// Since we force visibility upon cascade-hidden elements, an immediate (and slow)\n\t\t\t// check is required in this first loop unless we have a nonempty display value (either\n\t\t\t// inline or about-to-be-restored)\n\t\t\tif ( display === \"none\" ) {\n\t\t\t\tvalues[ index ] = dataPriv.get( elem, \"display\" ) || null;\n\t\t\t\tif ( !values[ index ] ) {\n\t\t\t\t\telem.style.display = \"\";\n\t\t\t\t}\n\t\t\t}\n\t\t\tif ( elem.style.display === \"\" && isHiddenWithinTree( elem ) ) {\n\t\t\t\tvalues[ index ] = getDefaultDisplay( elem );\n\t\t\t}\n\t\t} else {\n\t\t\tif ( display !== \"none\" ) {\n\t\t\t\tvalues[ index ] = \"none\";\n\n\t\t\t\t// Remember what we're overwriting\n\t\t\t\tdataPriv.set( elem, \"display\", display );\n\t\t\t}\n\t\t}\n\t}\n\n\t// Set the display of the elements in a second loop to avoid constant reflow\n\tfor ( index = 0; index < length; index++ ) {\n\t\tif ( values[ index ] != null ) {\n\t\t\telements[ index ].style.display = values[ index ];\n\t\t}\n\t}\n\n\treturn elements;\n}\n\njQuery.fn.extend( {\n\tshow: function() {\n\t\treturn showHide( this, true );\n\t},\n\thide: function() {\n\t\treturn showHide( this );\n\t},\n\ttoggle: function( state ) {\n\t\tif ( typeof state === \"boolean\" ) {\n\t\t\treturn state ? this.show() : this.hide();\n\t\t}\n\n\t\treturn this.each( function() {\n\t\t\tif ( isHiddenWithinTree( this ) ) {\n\t\t\t\tjQuery( this ).show();\n\t\t\t} else {\n\t\t\t\tjQuery( this ).hide();\n\t\t\t}\n\t\t} );\n\t}\n} );\nvar rcheckableType = ( /^(?:checkbox|radio)$/i );\n\nvar rtagName = ( /<([a-z][^\\/\\0>\\x20\\t\\r\\n\\f]*)/i );\n\nvar rscriptType = ( /^$|^module$|\\/(?:java|ecma)script/i );\n\n\n\n( function() {\n\tvar fragment = document.createDocumentFragment(),\n\t\tdiv = fragment.appendChild( document.createElement( \"div\" ) ),\n\t\tinput = document.createElement( \"input\" );\n\n\t// Support: Android 4.0 - 4.3 only\n\t// Check state lost if the name is set (#11217)\n\t// Support: Windows Web Apps (WWA)\n\t// `name` and `type` must use .setAttribute for WWA (#14901)\n\tinput.setAttribute( \"type\", \"radio\" );\n\tinput.setAttribute( \"checked\", \"checked\" );\n\tinput.setAttribute( \"name\", \"t\" );\n\n\tdiv.appendChild( input );\n\n\t// Support: Android <=4.1 only\n\t// Older WebKit doesn't clone checked state correctly in fragments\n\tsupport.checkClone = div.cloneNode( true ).cloneNode( true ).lastChild.checked;\n\n\t// Support: IE <=11 only\n\t// Make sure textarea (and checkbox) defaultValue is properly cloned\n\tdiv.innerHTML = \"\";\n\tsupport.noCloneChecked = !!div.cloneNode( true ).lastChild.defaultValue;\n\n\t// Support: IE <=9 only\n\t// IE <=9 replaces \";\n\tsupport.option = !!div.lastChild;\n} )();\n\n\n// We have to close these tags to support XHTML (#13200)\nvar wrapMap = {\n\n\t// XHTML parsers do not magically insert elements in the\n\t// same way that tag soup parsers do. So we cannot shorten\n\t// this by omitting or other required elements.\n\tthead: [ 1, \"\", \"
\" ],\n\tcol: [ 2, \"\", \"
\" ],\n\ttr: [ 2, \"\", \"
\" ],\n\ttd: [ 3, \"\", \"
\" ],\n\n\t_default: [ 0, \"\", \"\" ]\n};\n\nwrapMap.tbody = wrapMap.tfoot = wrapMap.colgroup = wrapMap.caption = wrapMap.thead;\nwrapMap.th = wrapMap.td;\n\n// Support: IE <=9 only\nif ( !support.option ) {\n\twrapMap.optgroup = wrapMap.option = [ 1, \"\" ];\n}\n\n\nfunction getAll( context, tag ) {\n\n\t// Support: IE <=9 - 11 only\n\t// Use typeof to avoid zero-argument method invocation on host objects (#15151)\n\tvar ret;\n\n\tif ( typeof context.getElementsByTagName !== \"undefined\" ) {\n\t\tret = context.getElementsByTagName( tag || \"*\" );\n\n\t} else if ( typeof context.querySelectorAll !== \"undefined\" ) {\n\t\tret = context.querySelectorAll( tag || \"*\" );\n\n\t} else {\n\t\tret = [];\n\t}\n\n\tif ( tag === undefined || tag && nodeName( context, tag ) ) {\n\t\treturn jQuery.merge( [ context ], ret );\n\t}\n\n\treturn ret;\n}\n\n\n// Mark scripts as having already been evaluated\nfunction setGlobalEval( elems, refElements ) {\n\tvar i = 0,\n\t\tl = elems.length;\n\n\tfor ( ; i < l; i++ ) {\n\t\tdataPriv.set(\n\t\t\telems[ i ],\n\t\t\t\"globalEval\",\n\t\t\t!refElements || dataPriv.get( refElements[ i ], \"globalEval\" )\n\t\t);\n\t}\n}\n\n\nvar rhtml = /<|&#?\\w+;/;\n\nfunction buildFragment( elems, context, scripts, selection, ignored ) {\n\tvar elem, tmp, tag, wrap, attached, j,\n\t\tfragment = context.createDocumentFragment(),\n\t\tnodes = [],\n\t\ti = 0,\n\t\tl = elems.length;\n\n\tfor ( ; i < l; i++ ) {\n\t\telem = elems[ i ];\n\n\t\tif ( elem || elem === 0 ) {\n\n\t\t\t// Add nodes directly\n\t\t\tif ( toType( elem ) === \"object\" ) {\n\n\t\t\t\t// Support: Android <=4.0 only, PhantomJS 1 only\n\t\t\t\t// push.apply(_, arraylike) throws on ancient WebKit\n\t\t\t\tjQuery.merge( nodes, elem.nodeType ? [ elem ] : elem );\n\n\t\t\t// Convert non-html into a text node\n\t\t\t} else if ( !rhtml.test( elem ) ) {\n\t\t\t\tnodes.push( context.createTextNode( elem ) );\n\n\t\t\t// Convert html into DOM nodes\n\t\t\t} else {\n\t\t\t\ttmp = tmp || fragment.appendChild( context.createElement( \"div\" ) );\n\n\t\t\t\t// Deserialize a standard representation\n\t\t\t\ttag = ( rtagName.exec( elem ) || [ \"\", \"\" ] )[ 1 ].toLowerCase();\n\t\t\t\twrap = wrapMap[ tag ] || wrapMap._default;\n\t\t\t\ttmp.innerHTML = wrap[ 1 ] + jQuery.htmlPrefilter( elem ) + wrap[ 2 ];\n\n\t\t\t\t// Descend through wrappers to the right content\n\t\t\t\tj = wrap[ 0 ];\n\t\t\t\twhile ( j-- ) {\n\t\t\t\t\ttmp = tmp.lastChild;\n\t\t\t\t}\n\n\t\t\t\t// Support: Android <=4.0 only, PhantomJS 1 only\n\t\t\t\t// push.apply(_, arraylike) throws on ancient WebKit\n\t\t\t\tjQuery.merge( nodes, tmp.childNodes );\n\n\t\t\t\t// Remember the top-level container\n\t\t\t\ttmp = fragment.firstChild;\n\n\t\t\t\t// Ensure the created nodes are orphaned (#12392)\n\t\t\t\ttmp.textContent = \"\";\n\t\t\t}\n\t\t}\n\t}\n\n\t// Remove wrapper from fragment\n\tfragment.textContent = \"\";\n\n\ti = 0;\n\twhile ( ( elem = nodes[ i++ ] ) ) {\n\n\t\t// Skip elements already in the context collection (trac-4087)\n\t\tif ( selection && jQuery.inArray( elem, selection ) > -1 ) {\n\t\t\tif ( ignored ) {\n\t\t\t\tignored.push( elem );\n\t\t\t}\n\t\t\tcontinue;\n\t\t}\n\n\t\tattached = isAttached( elem );\n\n\t\t// Append to fragment\n\t\ttmp = getAll( fragment.appendChild( elem ), \"script\" );\n\n\t\t// Preserve script evaluation history\n\t\tif ( attached ) {\n\t\t\tsetGlobalEval( tmp );\n\t\t}\n\n\t\t// Capture executables\n\t\tif ( scripts ) {\n\t\t\tj = 0;\n\t\t\twhile ( ( elem = tmp[ j++ ] ) ) {\n\t\t\t\tif ( rscriptType.test( elem.type || \"\" ) ) {\n\t\t\t\t\tscripts.push( elem );\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\treturn fragment;\n}\n\n\nvar rtypenamespace = /^([^.]*)(?:\\.(.+)|)/;\n\nfunction returnTrue() {\n\treturn true;\n}\n\nfunction returnFalse() {\n\treturn false;\n}\n\n// Support: IE <=9 - 11+\n// focus() and blur() are asynchronous, except when they are no-op.\n// So expect focus to be synchronous when the element is already active,\n// and blur to be synchronous when the element is not already active.\n// (focus and blur are always synchronous in other supported browsers,\n// this just defines when we can count on it).\nfunction expectSync( elem, type ) {\n\treturn ( elem === safeActiveElement() ) === ( type === \"focus\" );\n}\n\n// Support: IE <=9 only\n// Accessing document.activeElement can throw unexpectedly\n// https://bugs.jquery.com/ticket/13393\nfunction safeActiveElement() {\n\ttry {\n\t\treturn document.activeElement;\n\t} catch ( err ) { }\n}\n\nfunction on( elem, types, selector, data, fn, one ) {\n\tvar origFn, type;\n\n\t// Types can be a map of types/handlers\n\tif ( typeof types === \"object\" ) {\n\n\t\t// ( types-Object, selector, data )\n\t\tif ( typeof selector !== \"string\" ) {\n\n\t\t\t// ( types-Object, data )\n\t\t\tdata = data || selector;\n\t\t\tselector = undefined;\n\t\t}\n\t\tfor ( type in types ) {\n\t\t\ton( elem, type, selector, data, types[ type ], one );\n\t\t}\n\t\treturn elem;\n\t}\n\n\tif ( data == null && fn == null ) {\n\n\t\t// ( types, fn )\n\t\tfn = selector;\n\t\tdata = selector = undefined;\n\t} else if ( fn == null ) {\n\t\tif ( typeof selector === \"string\" ) {\n\n\t\t\t// ( types, selector, fn )\n\t\t\tfn = data;\n\t\t\tdata = undefined;\n\t\t} else {\n\n\t\t\t// ( types, data, fn )\n\t\t\tfn = data;\n\t\t\tdata = selector;\n\t\t\tselector = undefined;\n\t\t}\n\t}\n\tif ( fn === false ) {\n\t\tfn = returnFalse;\n\t} else if ( !fn ) {\n\t\treturn elem;\n\t}\n\n\tif ( one === 1 ) {\n\t\torigFn = fn;\n\t\tfn = function( event ) {\n\n\t\t\t// Can use an empty set, since event contains the info\n\t\t\tjQuery().off( event );\n\t\t\treturn origFn.apply( this, arguments );\n\t\t};\n\n\t\t// Use same guid so caller can remove using origFn\n\t\tfn.guid = origFn.guid || ( origFn.guid = jQuery.guid++ );\n\t}\n\treturn elem.each( function() {\n\t\tjQuery.event.add( this, types, fn, data, selector );\n\t} );\n}\n\n/*\n * Helper functions for managing events -- not part of the public interface.\n * Props to Dean Edwards' addEvent library for many of the ideas.\n */\njQuery.event = {\n\n\tglobal: {},\n\n\tadd: function( elem, types, handler, data, selector ) {\n\n\t\tvar handleObjIn, eventHandle, tmp,\n\t\t\tevents, t, handleObj,\n\t\t\tspecial, handlers, type, namespaces, origType,\n\t\t\telemData = dataPriv.get( elem );\n\n\t\t// Only attach events to objects that accept data\n\t\tif ( !acceptData( elem ) ) {\n\t\t\treturn;\n\t\t}\n\n\t\t// Caller can pass in an object of custom data in lieu of the handler\n\t\tif ( handler.handler ) {\n\t\t\thandleObjIn = handler;\n\t\t\thandler = handleObjIn.handler;\n\t\t\tselector = handleObjIn.selector;\n\t\t}\n\n\t\t// Ensure that invalid selectors throw exceptions at attach time\n\t\t// Evaluate against documentElement in case elem is a non-element node (e.g., document)\n\t\tif ( selector ) {\n\t\t\tjQuery.find.matchesSelector( documentElement, selector );\n\t\t}\n\n\t\t// Make sure that the handler has a unique ID, used to find/remove it later\n\t\tif ( !handler.guid ) {\n\t\t\thandler.guid = jQuery.guid++;\n\t\t}\n\n\t\t// Init the element's event structure and main handler, if this is the first\n\t\tif ( !( events = elemData.events ) ) {\n\t\t\tevents = elemData.events = Object.create( null );\n\t\t}\n\t\tif ( !( eventHandle = elemData.handle ) ) {\n\t\t\teventHandle = elemData.handle = function( e ) {\n\n\t\t\t\t// Discard the second event of a jQuery.event.trigger() and\n\t\t\t\t// when an event is called after a page has unloaded\n\t\t\t\treturn typeof jQuery !== \"undefined\" && jQuery.event.triggered !== e.type ?\n\t\t\t\t\tjQuery.event.dispatch.apply( elem, arguments ) : undefined;\n\t\t\t};\n\t\t}\n\n\t\t// Handle multiple events separated by a space\n\t\ttypes = ( types || \"\" ).match( rnothtmlwhite ) || [ \"\" ];\n\t\tt = types.length;\n\t\twhile ( t-- ) {\n\t\t\ttmp = rtypenamespace.exec( types[ t ] ) || [];\n\t\t\ttype = origType = tmp[ 1 ];\n\t\t\tnamespaces = ( tmp[ 2 ] || \"\" ).split( \".\" ).sort();\n\n\t\t\t// There *must* be a type, no attaching namespace-only handlers\n\t\t\tif ( !type ) {\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\t// If event changes its type, use the special event handlers for the changed type\n\t\t\tspecial = jQuery.event.special[ type ] || {};\n\n\t\t\t// If selector defined, determine special event api type, otherwise given type\n\t\t\ttype = ( selector ? special.delegateType : special.bindType ) || type;\n\n\t\t\t// Update special based on newly reset type\n\t\t\tspecial = jQuery.event.special[ type ] || {};\n\n\t\t\t// handleObj is passed to all event handlers\n\t\t\thandleObj = jQuery.extend( {\n\t\t\t\ttype: type,\n\t\t\t\torigType: origType,\n\t\t\t\tdata: data,\n\t\t\t\thandler: handler,\n\t\t\t\tguid: handler.guid,\n\t\t\t\tselector: selector,\n\t\t\t\tneedsContext: selector && jQuery.expr.match.needsContext.test( selector ),\n\t\t\t\tnamespace: namespaces.join( \".\" )\n\t\t\t}, handleObjIn );\n\n\t\t\t// Init the event handler queue if we're the first\n\t\t\tif ( !( handlers = events[ type ] ) ) {\n\t\t\t\thandlers = events[ type ] = [];\n\t\t\t\thandlers.delegateCount = 0;\n\n\t\t\t\t// Only use addEventListener if the special events handler returns false\n\t\t\t\tif ( !special.setup ||\n\t\t\t\t\tspecial.setup.call( elem, data, namespaces, eventHandle ) === false ) {\n\n\t\t\t\t\tif ( elem.addEventListener ) {\n\t\t\t\t\t\telem.addEventListener( type, eventHandle );\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif ( special.add ) {\n\t\t\t\tspecial.add.call( elem, handleObj );\n\n\t\t\t\tif ( !handleObj.handler.guid ) {\n\t\t\t\t\thandleObj.handler.guid = handler.guid;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Add to the element's handler list, delegates in front\n\t\t\tif ( selector ) {\n\t\t\t\thandlers.splice( handlers.delegateCount++, 0, handleObj );\n\t\t\t} else {\n\t\t\t\thandlers.push( handleObj );\n\t\t\t}\n\n\t\t\t// Keep track of which events have ever been used, for event optimization\n\t\t\tjQuery.event.global[ type ] = true;\n\t\t}\n\n\t},\n\n\t// Detach an event or set of events from an element\n\tremove: function( elem, types, handler, selector, mappedTypes ) {\n\n\t\tvar j, origCount, tmp,\n\t\t\tevents, t, handleObj,\n\t\t\tspecial, handlers, type, namespaces, origType,\n\t\t\telemData = dataPriv.hasData( elem ) && dataPriv.get( elem );\n\n\t\tif ( !elemData || !( events = elemData.events ) ) {\n\t\t\treturn;\n\t\t}\n\n\t\t// Once for each type.namespace in types; type may be omitted\n\t\ttypes = ( types || \"\" ).match( rnothtmlwhite ) || [ \"\" ];\n\t\tt = types.length;\n\t\twhile ( t-- ) {\n\t\t\ttmp = rtypenamespace.exec( types[ t ] ) || [];\n\t\t\ttype = origType = tmp[ 1 ];\n\t\t\tnamespaces = ( tmp[ 2 ] || \"\" ).split( \".\" ).sort();\n\n\t\t\t// Unbind all events (on this namespace, if provided) for the element\n\t\t\tif ( !type ) {\n\t\t\t\tfor ( type in events ) {\n\t\t\t\t\tjQuery.event.remove( elem, type + types[ t ], handler, selector, true );\n\t\t\t\t}\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\tspecial = jQuery.event.special[ type ] || {};\n\t\t\ttype = ( selector ? special.delegateType : special.bindType ) || type;\n\t\t\thandlers = events[ type ] || [];\n\t\t\ttmp = tmp[ 2 ] &&\n\t\t\t\tnew RegExp( \"(^|\\\\.)\" + namespaces.join( \"\\\\.(?:.*\\\\.|)\" ) + \"(\\\\.|$)\" );\n\n\t\t\t// Remove matching events\n\t\t\torigCount = j = handlers.length;\n\t\t\twhile ( j-- ) {\n\t\t\t\thandleObj = handlers[ j ];\n\n\t\t\t\tif ( ( mappedTypes || origType === handleObj.origType ) &&\n\t\t\t\t\t( !handler || handler.guid === handleObj.guid ) &&\n\t\t\t\t\t( !tmp || tmp.test( handleObj.namespace ) ) &&\n\t\t\t\t\t( !selector || selector === handleObj.selector ||\n\t\t\t\t\t\tselector === \"**\" && handleObj.selector ) ) {\n\t\t\t\t\thandlers.splice( j, 1 );\n\n\t\t\t\t\tif ( handleObj.selector ) {\n\t\t\t\t\t\thandlers.delegateCount--;\n\t\t\t\t\t}\n\t\t\t\t\tif ( special.remove ) {\n\t\t\t\t\t\tspecial.remove.call( elem, handleObj );\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Remove generic event handler if we removed something and no more handlers exist\n\t\t\t// (avoids potential for endless recursion during removal of special event handlers)\n\t\t\tif ( origCount && !handlers.length ) {\n\t\t\t\tif ( !special.teardown ||\n\t\t\t\t\tspecial.teardown.call( elem, namespaces, elemData.handle ) === false ) {\n\n\t\t\t\t\tjQuery.removeEvent( elem, type, elemData.handle );\n\t\t\t\t}\n\n\t\t\t\tdelete events[ type ];\n\t\t\t}\n\t\t}\n\n\t\t// Remove data and the expando if it's no longer used\n\t\tif ( jQuery.isEmptyObject( events ) ) {\n\t\t\tdataPriv.remove( elem, \"handle events\" );\n\t\t}\n\t},\n\n\tdispatch: function( nativeEvent ) {\n\n\t\tvar i, j, ret, matched, handleObj, handlerQueue,\n\t\t\targs = new Array( arguments.length ),\n\n\t\t\t// Make a writable jQuery.Event from the native event object\n\t\t\tevent = jQuery.event.fix( nativeEvent ),\n\n\t\t\thandlers = (\n\t\t\t\tdataPriv.get( this, \"events\" ) || Object.create( null )\n\t\t\t)[ event.type ] || [],\n\t\t\tspecial = jQuery.event.special[ event.type ] || {};\n\n\t\t// Use the fix-ed jQuery.Event rather than the (read-only) native event\n\t\targs[ 0 ] = event;\n\n\t\tfor ( i = 1; i < arguments.length; i++ ) {\n\t\t\targs[ i ] = arguments[ i ];\n\t\t}\n\n\t\tevent.delegateTarget = this;\n\n\t\t// Call the preDispatch hook for the mapped type, and let it bail if desired\n\t\tif ( special.preDispatch && special.preDispatch.call( this, event ) === false ) {\n\t\t\treturn;\n\t\t}\n\n\t\t// Determine handlers\n\t\thandlerQueue = jQuery.event.handlers.call( this, event, handlers );\n\n\t\t// Run delegates first; they may want to stop propagation beneath us\n\t\ti = 0;\n\t\twhile ( ( matched = handlerQueue[ i++ ] ) && !event.isPropagationStopped() ) {\n\t\t\tevent.currentTarget = matched.elem;\n\n\t\t\tj = 0;\n\t\t\twhile ( ( handleObj = matched.handlers[ j++ ] ) &&\n\t\t\t\t!event.isImmediatePropagationStopped() ) {\n\n\t\t\t\t// If the event is namespaced, then each handler is only invoked if it is\n\t\t\t\t// specially universal or its namespaces are a superset of the event's.\n\t\t\t\tif ( !event.rnamespace || handleObj.namespace === false ||\n\t\t\t\t\tevent.rnamespace.test( handleObj.namespace ) ) {\n\n\t\t\t\t\tevent.handleObj = handleObj;\n\t\t\t\t\tevent.data = handleObj.data;\n\n\t\t\t\t\tret = ( ( jQuery.event.special[ handleObj.origType ] || {} ).handle ||\n\t\t\t\t\t\thandleObj.handler ).apply( matched.elem, args );\n\n\t\t\t\t\tif ( ret !== undefined ) {\n\t\t\t\t\t\tif ( ( event.result = ret ) === false ) {\n\t\t\t\t\t\t\tevent.preventDefault();\n\t\t\t\t\t\t\tevent.stopPropagation();\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\t// Call the postDispatch hook for the mapped type\n\t\tif ( special.postDispatch ) {\n\t\t\tspecial.postDispatch.call( this, event );\n\t\t}\n\n\t\treturn event.result;\n\t},\n\n\thandlers: function( event, handlers ) {\n\t\tvar i, handleObj, sel, matchedHandlers, matchedSelectors,\n\t\t\thandlerQueue = [],\n\t\t\tdelegateCount = handlers.delegateCount,\n\t\t\tcur = event.target;\n\n\t\t// Find delegate handlers\n\t\tif ( delegateCount &&\n\n\t\t\t// Support: IE <=9\n\t\t\t// Black-hole SVG instance trees (trac-13180)\n\t\t\tcur.nodeType &&\n\n\t\t\t// Support: Firefox <=42\n\t\t\t// Suppress spec-violating clicks indicating a non-primary pointer button (trac-3861)\n\t\t\t// https://www.w3.org/TR/DOM-Level-3-Events/#event-type-click\n\t\t\t// Support: IE 11 only\n\t\t\t// ...but not arrow key \"clicks\" of radio inputs, which can have `button` -1 (gh-2343)\n\t\t\t!( event.type === \"click\" && event.button >= 1 ) ) {\n\n\t\t\tfor ( ; cur !== this; cur = cur.parentNode || this ) {\n\n\t\t\t\t// Don't check non-elements (#13208)\n\t\t\t\t// Don't process clicks on disabled elements (#6911, #8165, #11382, #11764)\n\t\t\t\tif ( cur.nodeType === 1 && !( event.type === \"click\" && cur.disabled === true ) ) {\n\t\t\t\t\tmatchedHandlers = [];\n\t\t\t\t\tmatchedSelectors = {};\n\t\t\t\t\tfor ( i = 0; i < delegateCount; i++ ) {\n\t\t\t\t\t\thandleObj = handlers[ i ];\n\n\t\t\t\t\t\t// Don't conflict with Object.prototype properties (#13203)\n\t\t\t\t\t\tsel = handleObj.selector + \" \";\n\n\t\t\t\t\t\tif ( matchedSelectors[ sel ] === undefined ) {\n\t\t\t\t\t\t\tmatchedSelectors[ sel ] = handleObj.needsContext ?\n\t\t\t\t\t\t\t\tjQuery( sel, this ).index( cur ) > -1 :\n\t\t\t\t\t\t\t\tjQuery.find( sel, this, null, [ cur ] ).length;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif ( matchedSelectors[ sel ] ) {\n\t\t\t\t\t\t\tmatchedHandlers.push( handleObj );\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tif ( matchedHandlers.length ) {\n\t\t\t\t\t\thandlerQueue.push( { elem: cur, handlers: matchedHandlers } );\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\t// Add the remaining (directly-bound) handlers\n\t\tcur = this;\n\t\tif ( delegateCount < handlers.length ) {\n\t\t\thandlerQueue.push( { elem: cur, handlers: handlers.slice( delegateCount ) } );\n\t\t}\n\n\t\treturn handlerQueue;\n\t},\n\n\taddProp: function( name, hook ) {\n\t\tObject.defineProperty( jQuery.Event.prototype, name, {\n\t\t\tenumerable: true,\n\t\t\tconfigurable: true,\n\n\t\t\tget: isFunction( hook ) ?\n\t\t\t\tfunction() {\n\t\t\t\t\tif ( this.originalEvent ) {\n\t\t\t\t\t\treturn hook( this.originalEvent );\n\t\t\t\t\t}\n\t\t\t\t} :\n\t\t\t\tfunction() {\n\t\t\t\t\tif ( this.originalEvent ) {\n\t\t\t\t\t\treturn this.originalEvent[ name ];\n\t\t\t\t\t}\n\t\t\t\t},\n\n\t\t\tset: function( value ) {\n\t\t\t\tObject.defineProperty( this, name, {\n\t\t\t\t\tenumerable: true,\n\t\t\t\t\tconfigurable: true,\n\t\t\t\t\twritable: true,\n\t\t\t\t\tvalue: value\n\t\t\t\t} );\n\t\t\t}\n\t\t} );\n\t},\n\n\tfix: function( originalEvent ) {\n\t\treturn originalEvent[ jQuery.expando ] ?\n\t\t\toriginalEvent :\n\t\t\tnew jQuery.Event( originalEvent );\n\t},\n\n\tspecial: {\n\t\tload: {\n\n\t\t\t// Prevent triggered image.load events from bubbling to window.load\n\t\t\tnoBubble: true\n\t\t},\n\t\tclick: {\n\n\t\t\t// Utilize native event to ensure correct state for checkable inputs\n\t\t\tsetup: function( data ) {\n\n\t\t\t\t// For mutual compressibility with _default, replace `this` access with a local var.\n\t\t\t\t// `|| data` is dead code meant only to preserve the variable through minification.\n\t\t\t\tvar el = this || data;\n\n\t\t\t\t// Claim the first handler\n\t\t\t\tif ( rcheckableType.test( el.type ) &&\n\t\t\t\t\tel.click && nodeName( el, \"input\" ) ) {\n\n\t\t\t\t\t// dataPriv.set( el, \"click\", ... )\n\t\t\t\t\tleverageNative( el, \"click\", returnTrue );\n\t\t\t\t}\n\n\t\t\t\t// Return false to allow normal processing in the caller\n\t\t\t\treturn false;\n\t\t\t},\n\t\t\ttrigger: function( data ) {\n\n\t\t\t\t// For mutual compressibility with _default, replace `this` access with a local var.\n\t\t\t\t// `|| data` is dead code meant only to preserve the variable through minification.\n\t\t\t\tvar el = this || data;\n\n\t\t\t\t// Force setup before triggering a click\n\t\t\t\tif ( rcheckableType.test( el.type ) &&\n\t\t\t\t\tel.click && nodeName( el, \"input\" ) ) {\n\n\t\t\t\t\tleverageNative( el, \"click\" );\n\t\t\t\t}\n\n\t\t\t\t// Return non-false to allow normal event-path propagation\n\t\t\t\treturn true;\n\t\t\t},\n\n\t\t\t// For cross-browser consistency, suppress native .click() on links\n\t\t\t// Also prevent it if we're currently inside a leveraged native-event stack\n\t\t\t_default: function( event ) {\n\t\t\t\tvar target = event.target;\n\t\t\t\treturn rcheckableType.test( target.type ) &&\n\t\t\t\t\ttarget.click && nodeName( target, \"input\" ) &&\n\t\t\t\t\tdataPriv.get( target, \"click\" ) ||\n\t\t\t\t\tnodeName( target, \"a\" );\n\t\t\t}\n\t\t},\n\n\t\tbeforeunload: {\n\t\t\tpostDispatch: function( event ) {\n\n\t\t\t\t// Support: Firefox 20+\n\t\t\t\t// Firefox doesn't alert if the returnValue field is not set.\n\t\t\t\tif ( event.result !== undefined && event.originalEvent ) {\n\t\t\t\t\tevent.originalEvent.returnValue = event.result;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n};\n\n// Ensure the presence of an event listener that handles manually-triggered\n// synthetic events by interrupting progress until reinvoked in response to\n// *native* events that it fires directly, ensuring that state changes have\n// already occurred before other listeners are invoked.\nfunction leverageNative( el, type, expectSync ) {\n\n\t// Missing expectSync indicates a trigger call, which must force setup through jQuery.event.add\n\tif ( !expectSync ) {\n\t\tif ( dataPriv.get( el, type ) === undefined ) {\n\t\t\tjQuery.event.add( el, type, returnTrue );\n\t\t}\n\t\treturn;\n\t}\n\n\t// Register the controller as a special universal handler for all event namespaces\n\tdataPriv.set( el, type, false );\n\tjQuery.event.add( el, type, {\n\t\tnamespace: false,\n\t\thandler: function( event ) {\n\t\t\tvar notAsync, result,\n\t\t\t\tsaved = dataPriv.get( this, type );\n\n\t\t\tif ( ( event.isTrigger & 1 ) && this[ type ] ) {\n\n\t\t\t\t// Interrupt processing of the outer synthetic .trigger()ed event\n\t\t\t\t// Saved data should be false in such cases, but might be a leftover capture object\n\t\t\t\t// from an async native handler (gh-4350)\n\t\t\t\tif ( !saved.length ) {\n\n\t\t\t\t\t// Store arguments for use when handling the inner native event\n\t\t\t\t\t// There will always be at least one argument (an event object), so this array\n\t\t\t\t\t// will not be confused with a leftover capture object.\n\t\t\t\t\tsaved = slice.call( arguments );\n\t\t\t\t\tdataPriv.set( this, type, saved );\n\n\t\t\t\t\t// Trigger the native event and capture its result\n\t\t\t\t\t// Support: IE <=9 - 11+\n\t\t\t\t\t// focus() and blur() are asynchronous\n\t\t\t\t\tnotAsync = expectSync( this, type );\n\t\t\t\t\tthis[ type ]();\n\t\t\t\t\tresult = dataPriv.get( this, type );\n\t\t\t\t\tif ( saved !== result || notAsync ) {\n\t\t\t\t\t\tdataPriv.set( this, type, false );\n\t\t\t\t\t} else {\n\t\t\t\t\t\tresult = {};\n\t\t\t\t\t}\n\t\t\t\t\tif ( saved !== result ) {\n\n\t\t\t\t\t\t// Cancel the outer synthetic event\n\t\t\t\t\t\tevent.stopImmediatePropagation();\n\t\t\t\t\t\tevent.preventDefault();\n\n\t\t\t\t\t\t// Support: Chrome 86+\n\t\t\t\t\t\t// In Chrome, if an element having a focusout handler is blurred by\n\t\t\t\t\t\t// clicking outside of it, it invokes the handler synchronously. If\n\t\t\t\t\t\t// that handler calls `.remove()` on the element, the data is cleared,\n\t\t\t\t\t\t// leaving `result` undefined. We need to guard against this.\n\t\t\t\t\t\treturn result && result.value;\n\t\t\t\t\t}\n\n\t\t\t\t// If this is an inner synthetic event for an event with a bubbling surrogate\n\t\t\t\t// (focus or blur), assume that the surrogate already propagated from triggering the\n\t\t\t\t// native event and prevent that from happening again here.\n\t\t\t\t// This technically gets the ordering wrong w.r.t. to `.trigger()` (in which the\n\t\t\t\t// bubbling surrogate propagates *after* the non-bubbling base), but that seems\n\t\t\t\t// less bad than duplication.\n\t\t\t\t} else if ( ( jQuery.event.special[ type ] || {} ).delegateType ) {\n\t\t\t\t\tevent.stopPropagation();\n\t\t\t\t}\n\n\t\t\t// If this is a native event triggered above, everything is now in order\n\t\t\t// Fire an inner synthetic event with the original arguments\n\t\t\t} else if ( saved.length ) {\n\n\t\t\t\t// ...and capture the result\n\t\t\t\tdataPriv.set( this, type, {\n\t\t\t\t\tvalue: jQuery.event.trigger(\n\n\t\t\t\t\t\t// Support: IE <=9 - 11+\n\t\t\t\t\t\t// Extend with the prototype to reset the above stopImmediatePropagation()\n\t\t\t\t\t\tjQuery.extend( saved[ 0 ], jQuery.Event.prototype ),\n\t\t\t\t\t\tsaved.slice( 1 ),\n\t\t\t\t\t\tthis\n\t\t\t\t\t)\n\t\t\t\t} );\n\n\t\t\t\t// Abort handling of the native event\n\t\t\t\tevent.stopImmediatePropagation();\n\t\t\t}\n\t\t}\n\t} );\n}\n\njQuery.removeEvent = function( elem, type, handle ) {\n\n\t// This \"if\" is needed for plain objects\n\tif ( elem.removeEventListener ) {\n\t\telem.removeEventListener( type, handle );\n\t}\n};\n\njQuery.Event = function( src, props ) {\n\n\t// Allow instantiation without the 'new' keyword\n\tif ( !( this instanceof jQuery.Event ) ) {\n\t\treturn new jQuery.Event( src, props );\n\t}\n\n\t// Event object\n\tif ( src && src.type ) {\n\t\tthis.originalEvent = src;\n\t\tthis.type = src.type;\n\n\t\t// Events bubbling up the document may have been marked as prevented\n\t\t// by a handler lower down the tree; reflect the correct value.\n\t\tthis.isDefaultPrevented = src.defaultPrevented ||\n\t\t\t\tsrc.defaultPrevented === undefined &&\n\n\t\t\t\t// Support: Android <=2.3 only\n\t\t\t\tsrc.returnValue === false ?\n\t\t\treturnTrue :\n\t\t\treturnFalse;\n\n\t\t// Create target properties\n\t\t// Support: Safari <=6 - 7 only\n\t\t// Target should not be a text node (#504, #13143)\n\t\tthis.target = ( src.target && src.target.nodeType === 3 ) ?\n\t\t\tsrc.target.parentNode :\n\t\t\tsrc.target;\n\n\t\tthis.currentTarget = src.currentTarget;\n\t\tthis.relatedTarget = src.relatedTarget;\n\n\t// Event type\n\t} else {\n\t\tthis.type = src;\n\t}\n\n\t// Put explicitly provided properties onto the event object\n\tif ( props ) {\n\t\tjQuery.extend( this, props );\n\t}\n\n\t// Create a timestamp if incoming event doesn't have one\n\tthis.timeStamp = src && src.timeStamp || Date.now();\n\n\t// Mark it as fixed\n\tthis[ jQuery.expando ] = true;\n};\n\n// jQuery.Event is based on DOM3 Events as specified by the ECMAScript Language Binding\n// https://www.w3.org/TR/2003/WD-DOM-Level-3-Events-20030331/ecma-script-binding.html\njQuery.Event.prototype = {\n\tconstructor: jQuery.Event,\n\tisDefaultPrevented: returnFalse,\n\tisPropagationStopped: returnFalse,\n\tisImmediatePropagationStopped: returnFalse,\n\tisSimulated: false,\n\n\tpreventDefault: function() {\n\t\tvar e = this.originalEvent;\n\n\t\tthis.isDefaultPrevented = returnTrue;\n\n\t\tif ( e && !this.isSimulated ) {\n\t\t\te.preventDefault();\n\t\t}\n\t},\n\tstopPropagation: function() {\n\t\tvar e = this.originalEvent;\n\n\t\tthis.isPropagationStopped = returnTrue;\n\n\t\tif ( e && !this.isSimulated ) {\n\t\t\te.stopPropagation();\n\t\t}\n\t},\n\tstopImmediatePropagation: function() {\n\t\tvar e = this.originalEvent;\n\n\t\tthis.isImmediatePropagationStopped = returnTrue;\n\n\t\tif ( e && !this.isSimulated ) {\n\t\t\te.stopImmediatePropagation();\n\t\t}\n\n\t\tthis.stopPropagation();\n\t}\n};\n\n// Includes all common event props including KeyEvent and MouseEvent specific props\njQuery.each( {\n\taltKey: true,\n\tbubbles: true,\n\tcancelable: true,\n\tchangedTouches: true,\n\tctrlKey: true,\n\tdetail: true,\n\teventPhase: true,\n\tmetaKey: true,\n\tpageX: true,\n\tpageY: true,\n\tshiftKey: true,\n\tview: true,\n\t\"char\": true,\n\tcode: true,\n\tcharCode: true,\n\tkey: true,\n\tkeyCode: true,\n\tbutton: true,\n\tbuttons: true,\n\tclientX: true,\n\tclientY: true,\n\toffsetX: true,\n\toffsetY: true,\n\tpointerId: true,\n\tpointerType: true,\n\tscreenX: true,\n\tscreenY: true,\n\ttargetTouches: true,\n\ttoElement: true,\n\ttouches: true,\n\twhich: true\n}, jQuery.event.addProp );\n\njQuery.each( { focus: \"focusin\", blur: \"focusout\" }, function( type, delegateType ) {\n\tjQuery.event.special[ type ] = {\n\n\t\t// Utilize native event if possible so blur/focus sequence is correct\n\t\tsetup: function() {\n\n\t\t\t// Claim the first handler\n\t\t\t// dataPriv.set( this, \"focus\", ... )\n\t\t\t// dataPriv.set( this, \"blur\", ... )\n\t\t\tleverageNative( this, type, expectSync );\n\n\t\t\t// Return false to allow normal processing in the caller\n\t\t\treturn false;\n\t\t},\n\t\ttrigger: function() {\n\n\t\t\t// Force setup before trigger\n\t\t\tleverageNative( this, type );\n\n\t\t\t// Return non-false to allow normal event-path propagation\n\t\t\treturn true;\n\t\t},\n\n\t\t// Suppress native focus or blur as it's already being fired\n\t\t// in leverageNative.\n\t\t_default: function() {\n\t\t\treturn true;\n\t\t},\n\n\t\tdelegateType: delegateType\n\t};\n} );\n\n// Create mouseenter/leave events using mouseover/out and event-time checks\n// so that event delegation works in jQuery.\n// Do the same for pointerenter/pointerleave and pointerover/pointerout\n//\n// Support: Safari 7 only\n// Safari sends mouseenter too often; see:\n// https://bugs.chromium.org/p/chromium/issues/detail?id=470258\n// for the description of the bug (it existed in older Chrome versions as well).\njQuery.each( {\n\tmouseenter: \"mouseover\",\n\tmouseleave: \"mouseout\",\n\tpointerenter: \"pointerover\",\n\tpointerleave: \"pointerout\"\n}, function( orig, fix ) {\n\tjQuery.event.special[ orig ] = {\n\t\tdelegateType: fix,\n\t\tbindType: fix,\n\n\t\thandle: function( event ) {\n\t\t\tvar ret,\n\t\t\t\ttarget = this,\n\t\t\t\trelated = event.relatedTarget,\n\t\t\t\thandleObj = event.handleObj;\n\n\t\t\t// For mouseenter/leave call the handler if related is outside the target.\n\t\t\t// NB: No relatedTarget if the mouse left/entered the browser window\n\t\t\tif ( !related || ( related !== target && !jQuery.contains( target, related ) ) ) {\n\t\t\t\tevent.type = handleObj.origType;\n\t\t\t\tret = handleObj.handler.apply( this, arguments );\n\t\t\t\tevent.type = fix;\n\t\t\t}\n\t\t\treturn ret;\n\t\t}\n\t};\n} );\n\njQuery.fn.extend( {\n\n\ton: function( types, selector, data, fn ) {\n\t\treturn on( this, types, selector, data, fn );\n\t},\n\tone: function( types, selector, data, fn ) {\n\t\treturn on( this, types, selector, data, fn, 1 );\n\t},\n\toff: function( types, selector, fn ) {\n\t\tvar handleObj, type;\n\t\tif ( types && types.preventDefault && types.handleObj ) {\n\n\t\t\t// ( event ) dispatched jQuery.Event\n\t\t\thandleObj = types.handleObj;\n\t\t\tjQuery( types.delegateTarget ).off(\n\t\t\t\thandleObj.namespace ?\n\t\t\t\t\thandleObj.origType + \".\" + handleObj.namespace :\n\t\t\t\t\thandleObj.origType,\n\t\t\t\thandleObj.selector,\n\t\t\t\thandleObj.handler\n\t\t\t);\n\t\t\treturn this;\n\t\t}\n\t\tif ( typeof types === \"object\" ) {\n\n\t\t\t// ( types-object [, selector] )\n\t\t\tfor ( type in types ) {\n\t\t\t\tthis.off( type, selector, types[ type ] );\n\t\t\t}\n\t\t\treturn this;\n\t\t}\n\t\tif ( selector === false || typeof selector === \"function\" ) {\n\n\t\t\t// ( types [, fn] )\n\t\t\tfn = selector;\n\t\t\tselector = undefined;\n\t\t}\n\t\tif ( fn === false ) {\n\t\t\tfn = returnFalse;\n\t\t}\n\t\treturn this.each( function() {\n\t\t\tjQuery.event.remove( this, types, fn, selector );\n\t\t} );\n\t}\n} );\n\n\nvar\n\n\t// Support: IE <=10 - 11, Edge 12 - 13 only\n\t// In IE/Edge using regex groups here causes severe slowdowns.\n\t// See https://connect.microsoft.com/IE/feedback/details/1736512/\n\trnoInnerhtml = /\\s*$/g;\n\n// Prefer a tbody over its parent table for containing new rows\nfunction manipulationTarget( elem, content ) {\n\tif ( nodeName( elem, \"table\" ) &&\n\t\tnodeName( content.nodeType !== 11 ? content : content.firstChild, \"tr\" ) ) {\n\n\t\treturn jQuery( elem ).children( \"tbody\" )[ 0 ] || elem;\n\t}\n\n\treturn elem;\n}\n\n// Replace/restore the type attribute of script elements for safe DOM manipulation\nfunction disableScript( elem ) {\n\telem.type = ( elem.getAttribute( \"type\" ) !== null ) + \"/\" + elem.type;\n\treturn elem;\n}\nfunction restoreScript( elem ) {\n\tif ( ( elem.type || \"\" ).slice( 0, 5 ) === \"true/\" ) {\n\t\telem.type = elem.type.slice( 5 );\n\t} else {\n\t\telem.removeAttribute( \"type\" );\n\t}\n\n\treturn elem;\n}\n\nfunction cloneCopyEvent( src, dest ) {\n\tvar i, l, type, pdataOld, udataOld, udataCur, events;\n\n\tif ( dest.nodeType !== 1 ) {\n\t\treturn;\n\t}\n\n\t// 1. Copy private data: events, handlers, etc.\n\tif ( dataPriv.hasData( src ) ) {\n\t\tpdataOld = dataPriv.get( src );\n\t\tevents = pdataOld.events;\n\n\t\tif ( events ) {\n\t\t\tdataPriv.remove( dest, \"handle events\" );\n\n\t\t\tfor ( type in events ) {\n\t\t\t\tfor ( i = 0, l = events[ type ].length; i < l; i++ ) {\n\t\t\t\t\tjQuery.event.add( dest, type, events[ type ][ i ] );\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\t// 2. Copy user data\n\tif ( dataUser.hasData( src ) ) {\n\t\tudataOld = dataUser.access( src );\n\t\tudataCur = jQuery.extend( {}, udataOld );\n\n\t\tdataUser.set( dest, udataCur );\n\t}\n}\n\n// Fix IE bugs, see support tests\nfunction fixInput( src, dest ) {\n\tvar nodeName = dest.nodeName.toLowerCase();\n\n\t// Fails to persist the checked state of a cloned checkbox or radio button.\n\tif ( nodeName === \"input\" && rcheckableType.test( src.type ) ) {\n\t\tdest.checked = src.checked;\n\n\t// Fails to return the selected option to the default selected state when cloning options\n\t} else if ( nodeName === \"input\" || nodeName === \"textarea\" ) {\n\t\tdest.defaultValue = src.defaultValue;\n\t}\n}\n\nfunction domManip( collection, args, callback, ignored ) {\n\n\t// Flatten any nested arrays\n\targs = flat( args );\n\n\tvar fragment, first, scripts, hasScripts, node, doc,\n\t\ti = 0,\n\t\tl = collection.length,\n\t\tiNoClone = l - 1,\n\t\tvalue = args[ 0 ],\n\t\tvalueIsFunction = isFunction( value );\n\n\t// We can't cloneNode fragments that contain checked, in WebKit\n\tif ( valueIsFunction ||\n\t\t\t( l > 1 && typeof value === \"string\" &&\n\t\t\t\t!support.checkClone && rchecked.test( value ) ) ) {\n\t\treturn collection.each( function( index ) {\n\t\t\tvar self = collection.eq( index );\n\t\t\tif ( valueIsFunction ) {\n\t\t\t\targs[ 0 ] = value.call( this, index, self.html() );\n\t\t\t}\n\t\t\tdomManip( self, args, callback, ignored );\n\t\t} );\n\t}\n\n\tif ( l ) {\n\t\tfragment = buildFragment( args, collection[ 0 ].ownerDocument, false, collection, ignored );\n\t\tfirst = fragment.firstChild;\n\n\t\tif ( fragment.childNodes.length === 1 ) {\n\t\t\tfragment = first;\n\t\t}\n\n\t\t// Require either new content or an interest in ignored elements to invoke the callback\n\t\tif ( first || ignored ) {\n\t\t\tscripts = jQuery.map( getAll( fragment, \"script\" ), disableScript );\n\t\t\thasScripts = scripts.length;\n\n\t\t\t// Use the original fragment for the last item\n\t\t\t// instead of the first because it can end up\n\t\t\t// being emptied incorrectly in certain situations (#8070).\n\t\t\tfor ( ; i < l; i++ ) {\n\t\t\t\tnode = fragment;\n\n\t\t\t\tif ( i !== iNoClone ) {\n\t\t\t\t\tnode = jQuery.clone( node, true, true );\n\n\t\t\t\t\t// Keep references to cloned scripts for later restoration\n\t\t\t\t\tif ( hasScripts ) {\n\n\t\t\t\t\t\t// Support: Android <=4.0 only, PhantomJS 1 only\n\t\t\t\t\t\t// push.apply(_, arraylike) throws on ancient WebKit\n\t\t\t\t\t\tjQuery.merge( scripts, getAll( node, \"script\" ) );\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tcallback.call( collection[ i ], node, i );\n\t\t\t}\n\n\t\t\tif ( hasScripts ) {\n\t\t\t\tdoc = scripts[ scripts.length - 1 ].ownerDocument;\n\n\t\t\t\t// Reenable scripts\n\t\t\t\tjQuery.map( scripts, restoreScript );\n\n\t\t\t\t// Evaluate executable scripts on first document insertion\n\t\t\t\tfor ( i = 0; i < hasScripts; i++ ) {\n\t\t\t\t\tnode = scripts[ i ];\n\t\t\t\t\tif ( rscriptType.test( node.type || \"\" ) &&\n\t\t\t\t\t\t!dataPriv.access( node, \"globalEval\" ) &&\n\t\t\t\t\t\tjQuery.contains( doc, node ) ) {\n\n\t\t\t\t\t\tif ( node.src && ( node.type || \"\" ).toLowerCase() !== \"module\" ) {\n\n\t\t\t\t\t\t\t// Optional AJAX dependency, but won't run scripts if not present\n\t\t\t\t\t\t\tif ( jQuery._evalUrl && !node.noModule ) {\n\t\t\t\t\t\t\t\tjQuery._evalUrl( node.src, {\n\t\t\t\t\t\t\t\t\tnonce: node.nonce || node.getAttribute( \"nonce\" )\n\t\t\t\t\t\t\t\t}, doc );\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tDOMEval( node.textContent.replace( rcleanScript, \"\" ), node, doc );\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\treturn collection;\n}\n\nfunction remove( elem, selector, keepData ) {\n\tvar node,\n\t\tnodes = selector ? jQuery.filter( selector, elem ) : elem,\n\t\ti = 0;\n\n\tfor ( ; ( node = nodes[ i ] ) != null; i++ ) {\n\t\tif ( !keepData && node.nodeType === 1 ) {\n\t\t\tjQuery.cleanData( getAll( node ) );\n\t\t}\n\n\t\tif ( node.parentNode ) {\n\t\t\tif ( keepData && isAttached( node ) ) {\n\t\t\t\tsetGlobalEval( getAll( node, \"script\" ) );\n\t\t\t}\n\t\t\tnode.parentNode.removeChild( node );\n\t\t}\n\t}\n\n\treturn elem;\n}\n\njQuery.extend( {\n\thtmlPrefilter: function( html ) {\n\t\treturn html;\n\t},\n\n\tclone: function( elem, dataAndEvents, deepDataAndEvents ) {\n\t\tvar i, l, srcElements, destElements,\n\t\t\tclone = elem.cloneNode( true ),\n\t\t\tinPage = isAttached( elem );\n\n\t\t// Fix IE cloning issues\n\t\tif ( !support.noCloneChecked && ( elem.nodeType === 1 || elem.nodeType === 11 ) &&\n\t\t\t\t!jQuery.isXMLDoc( elem ) ) {\n\n\t\t\t// We eschew Sizzle here for performance reasons: https://jsperf.com/getall-vs-sizzle/2\n\t\t\tdestElements = getAll( clone );\n\t\t\tsrcElements = getAll( elem );\n\n\t\t\tfor ( i = 0, l = srcElements.length; i < l; i++ ) {\n\t\t\t\tfixInput( srcElements[ i ], destElements[ i ] );\n\t\t\t}\n\t\t}\n\n\t\t// Copy the events from the original to the clone\n\t\tif ( dataAndEvents ) {\n\t\t\tif ( deepDataAndEvents ) {\n\t\t\t\tsrcElements = srcElements || getAll( elem );\n\t\t\t\tdestElements = destElements || getAll( clone );\n\n\t\t\t\tfor ( i = 0, l = srcElements.length; i < l; i++ ) {\n\t\t\t\t\tcloneCopyEvent( srcElements[ i ], destElements[ i ] );\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tcloneCopyEvent( elem, clone );\n\t\t\t}\n\t\t}\n\n\t\t// Preserve script evaluation history\n\t\tdestElements = getAll( clone, \"script\" );\n\t\tif ( destElements.length > 0 ) {\n\t\t\tsetGlobalEval( destElements, !inPage && getAll( elem, \"script\" ) );\n\t\t}\n\n\t\t// Return the cloned set\n\t\treturn clone;\n\t},\n\n\tcleanData: function( elems ) {\n\t\tvar data, elem, type,\n\t\t\tspecial = jQuery.event.special,\n\t\t\ti = 0;\n\n\t\tfor ( ; ( elem = elems[ i ] ) !== undefined; i++ ) {\n\t\t\tif ( acceptData( elem ) ) {\n\t\t\t\tif ( ( data = elem[ dataPriv.expando ] ) ) {\n\t\t\t\t\tif ( data.events ) {\n\t\t\t\t\t\tfor ( type in data.events ) {\n\t\t\t\t\t\t\tif ( special[ type ] ) {\n\t\t\t\t\t\t\t\tjQuery.event.remove( elem, type );\n\n\t\t\t\t\t\t\t// This is a shortcut to avoid jQuery.event.remove's overhead\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\tjQuery.removeEvent( elem, type, data.handle );\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\t// Support: Chrome <=35 - 45+\n\t\t\t\t\t// Assign undefined instead of using delete, see Data#remove\n\t\t\t\t\telem[ dataPriv.expando ] = undefined;\n\t\t\t\t}\n\t\t\t\tif ( elem[ dataUser.expando ] ) {\n\n\t\t\t\t\t// Support: Chrome <=35 - 45+\n\t\t\t\t\t// Assign undefined instead of using delete, see Data#remove\n\t\t\t\t\telem[ dataUser.expando ] = undefined;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n} );\n\njQuery.fn.extend( {\n\tdetach: function( selector ) {\n\t\treturn remove( this, selector, true );\n\t},\n\n\tremove: function( selector ) {\n\t\treturn remove( this, selector );\n\t},\n\n\ttext: function( value ) {\n\t\treturn access( this, function( value ) {\n\t\t\treturn value === undefined ?\n\t\t\t\tjQuery.text( this ) :\n\t\t\t\tthis.empty().each( function() {\n\t\t\t\t\tif ( this.nodeType === 1 || this.nodeType === 11 || this.nodeType === 9 ) {\n\t\t\t\t\t\tthis.textContent = value;\n\t\t\t\t\t}\n\t\t\t\t} );\n\t\t}, null, value, arguments.length );\n\t},\n\n\tappend: function() {\n\t\treturn domManip( this, arguments, function( elem ) {\n\t\t\tif ( this.nodeType === 1 || this.nodeType === 11 || this.nodeType === 9 ) {\n\t\t\t\tvar target = manipulationTarget( this, elem );\n\t\t\t\ttarget.appendChild( elem );\n\t\t\t}\n\t\t} );\n\t},\n\n\tprepend: function() {\n\t\treturn domManip( this, arguments, function( elem ) {\n\t\t\tif ( this.nodeType === 1 || this.nodeType === 11 || this.nodeType === 9 ) {\n\t\t\t\tvar target = manipulationTarget( this, elem );\n\t\t\t\ttarget.insertBefore( elem, target.firstChild );\n\t\t\t}\n\t\t} );\n\t},\n\n\tbefore: function() {\n\t\treturn domManip( this, arguments, function( elem ) {\n\t\t\tif ( this.parentNode ) {\n\t\t\t\tthis.parentNode.insertBefore( elem, this );\n\t\t\t}\n\t\t} );\n\t},\n\n\tafter: function() {\n\t\treturn domManip( this, arguments, function( elem ) {\n\t\t\tif ( this.parentNode ) {\n\t\t\t\tthis.parentNode.insertBefore( elem, this.nextSibling );\n\t\t\t}\n\t\t} );\n\t},\n\n\tempty: function() {\n\t\tvar elem,\n\t\t\ti = 0;\n\n\t\tfor ( ; ( elem = this[ i ] ) != null; i++ ) {\n\t\t\tif ( elem.nodeType === 1 ) {\n\n\t\t\t\t// Prevent memory leaks\n\t\t\t\tjQuery.cleanData( getAll( elem, false ) );\n\n\t\t\t\t// Remove any remaining nodes\n\t\t\t\telem.textContent = \"\";\n\t\t\t}\n\t\t}\n\n\t\treturn this;\n\t},\n\n\tclone: function( dataAndEvents, deepDataAndEvents ) {\n\t\tdataAndEvents = dataAndEvents == null ? false : dataAndEvents;\n\t\tdeepDataAndEvents = deepDataAndEvents == null ? dataAndEvents : deepDataAndEvents;\n\n\t\treturn this.map( function() {\n\t\t\treturn jQuery.clone( this, dataAndEvents, deepDataAndEvents );\n\t\t} );\n\t},\n\n\thtml: function( value ) {\n\t\treturn access( this, function( value ) {\n\t\t\tvar elem = this[ 0 ] || {},\n\t\t\t\ti = 0,\n\t\t\t\tl = this.length;\n\n\t\t\tif ( value === undefined && elem.nodeType === 1 ) {\n\t\t\t\treturn elem.innerHTML;\n\t\t\t}\n\n\t\t\t// See if we can take a shortcut and just use innerHTML\n\t\t\tif ( typeof value === \"string\" && !rnoInnerhtml.test( value ) &&\n\t\t\t\t!wrapMap[ ( rtagName.exec( value ) || [ \"\", \"\" ] )[ 1 ].toLowerCase() ] ) {\n\n\t\t\t\tvalue = jQuery.htmlPrefilter( value );\n\n\t\t\t\ttry {\n\t\t\t\t\tfor ( ; i < l; i++ ) {\n\t\t\t\t\t\telem = this[ i ] || {};\n\n\t\t\t\t\t\t// Remove element nodes and prevent memory leaks\n\t\t\t\t\t\tif ( elem.nodeType === 1 ) {\n\t\t\t\t\t\t\tjQuery.cleanData( getAll( elem, false ) );\n\t\t\t\t\t\t\telem.innerHTML = value;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\telem = 0;\n\n\t\t\t\t// If using innerHTML throws an exception, use the fallback method\n\t\t\t\t} catch ( e ) {}\n\t\t\t}\n\n\t\t\tif ( elem ) {\n\t\t\t\tthis.empty().append( value );\n\t\t\t}\n\t\t}, null, value, arguments.length );\n\t},\n\n\treplaceWith: function() {\n\t\tvar ignored = [];\n\n\t\t// Make the changes, replacing each non-ignored context element with the new content\n\t\treturn domManip( this, arguments, function( elem ) {\n\t\t\tvar parent = this.parentNode;\n\n\t\t\tif ( jQuery.inArray( this, ignored ) < 0 ) {\n\t\t\t\tjQuery.cleanData( getAll( this ) );\n\t\t\t\tif ( parent ) {\n\t\t\t\t\tparent.replaceChild( elem, this );\n\t\t\t\t}\n\t\t\t}\n\n\t\t// Force callback invocation\n\t\t}, ignored );\n\t}\n} );\n\njQuery.each( {\n\tappendTo: \"append\",\n\tprependTo: \"prepend\",\n\tinsertBefore: \"before\",\n\tinsertAfter: \"after\",\n\treplaceAll: \"replaceWith\"\n}, function( name, original ) {\n\tjQuery.fn[ name ] = function( selector ) {\n\t\tvar elems,\n\t\t\tret = [],\n\t\t\tinsert = jQuery( selector ),\n\t\t\tlast = insert.length - 1,\n\t\t\ti = 0;\n\n\t\tfor ( ; i <= last; i++ ) {\n\t\t\telems = i === last ? this : this.clone( true );\n\t\t\tjQuery( insert[ i ] )[ original ]( elems );\n\n\t\t\t// Support: Android <=4.0 only, PhantomJS 1 only\n\t\t\t// .get() because push.apply(_, arraylike) throws on ancient WebKit\n\t\t\tpush.apply( ret, elems.get() );\n\t\t}\n\n\t\treturn this.pushStack( ret );\n\t};\n} );\nvar rnumnonpx = new RegExp( \"^(\" + pnum + \")(?!px)[a-z%]+$\", \"i\" );\n\nvar getStyles = function( elem ) {\n\n\t\t// Support: IE <=11 only, Firefox <=30 (#15098, #14150)\n\t\t// IE throws on elements created in popups\n\t\t// FF meanwhile throws on frame elements through \"defaultView.getComputedStyle\"\n\t\tvar view = elem.ownerDocument.defaultView;\n\n\t\tif ( !view || !view.opener ) {\n\t\t\tview = window;\n\t\t}\n\n\t\treturn view.getComputedStyle( elem );\n\t};\n\nvar swap = function( elem, options, callback ) {\n\tvar ret, name,\n\t\told = {};\n\n\t// Remember the old values, and insert the new ones\n\tfor ( name in options ) {\n\t\told[ name ] = elem.style[ name ];\n\t\telem.style[ name ] = options[ name ];\n\t}\n\n\tret = callback.call( elem );\n\n\t// Revert the old values\n\tfor ( name in options ) {\n\t\telem.style[ name ] = old[ name ];\n\t}\n\n\treturn ret;\n};\n\n\nvar rboxStyle = new RegExp( cssExpand.join( \"|\" ), \"i\" );\n\n\n\n( function() {\n\n\t// Executing both pixelPosition & boxSizingReliable tests require only one layout\n\t// so they're executed at the same time to save the second computation.\n\tfunction computeStyleTests() {\n\n\t\t// This is a singleton, we need to execute it only once\n\t\tif ( !div ) {\n\t\t\treturn;\n\t\t}\n\n\t\tcontainer.style.cssText = \"position:absolute;left:-11111px;width:60px;\" +\n\t\t\t\"margin-top:1px;padding:0;border:0\";\n\t\tdiv.style.cssText =\n\t\t\t\"position:relative;display:block;box-sizing:border-box;overflow:scroll;\" +\n\t\t\t\"margin:auto;border:1px;padding:1px;\" +\n\t\t\t\"width:60%;top:1%\";\n\t\tdocumentElement.appendChild( container ).appendChild( div );\n\n\t\tvar divStyle = window.getComputedStyle( div );\n\t\tpixelPositionVal = divStyle.top !== \"1%\";\n\n\t\t// Support: Android 4.0 - 4.3 only, Firefox <=3 - 44\n\t\treliableMarginLeftVal = roundPixelMeasures( divStyle.marginLeft ) === 12;\n\n\t\t// Support: Android 4.0 - 4.3 only, Safari <=9.1 - 10.1, iOS <=7.0 - 9.3\n\t\t// Some styles come back with percentage values, even though they shouldn't\n\t\tdiv.style.right = \"60%\";\n\t\tpixelBoxStylesVal = roundPixelMeasures( divStyle.right ) === 36;\n\n\t\t// Support: IE 9 - 11 only\n\t\t// Detect misreporting of content dimensions for box-sizing:border-box elements\n\t\tboxSizingReliableVal = roundPixelMeasures( divStyle.width ) === 36;\n\n\t\t// Support: IE 9 only\n\t\t// Detect overflow:scroll screwiness (gh-3699)\n\t\t// Support: Chrome <=64\n\t\t// Don't get tricked when zoom affects offsetWidth (gh-4029)\n\t\tdiv.style.position = \"absolute\";\n\t\tscrollboxSizeVal = roundPixelMeasures( div.offsetWidth / 3 ) === 12;\n\n\t\tdocumentElement.removeChild( container );\n\n\t\t// Nullify the div so it wouldn't be stored in the memory and\n\t\t// it will also be a sign that checks already performed\n\t\tdiv = null;\n\t}\n\n\tfunction roundPixelMeasures( measure ) {\n\t\treturn Math.round( parseFloat( measure ) );\n\t}\n\n\tvar pixelPositionVal, boxSizingReliableVal, scrollboxSizeVal, pixelBoxStylesVal,\n\t\treliableTrDimensionsVal, reliableMarginLeftVal,\n\t\tcontainer = document.createElement( \"div\" ),\n\t\tdiv = document.createElement( \"div\" );\n\n\t// Finish early in limited (non-browser) environments\n\tif ( !div.style ) {\n\t\treturn;\n\t}\n\n\t// Support: IE <=9 - 11 only\n\t// Style of cloned element affects source element cloned (#8908)\n\tdiv.style.backgroundClip = \"content-box\";\n\tdiv.cloneNode( true ).style.backgroundClip = \"\";\n\tsupport.clearCloneStyle = div.style.backgroundClip === \"content-box\";\n\n\tjQuery.extend( support, {\n\t\tboxSizingReliable: function() {\n\t\t\tcomputeStyleTests();\n\t\t\treturn boxSizingReliableVal;\n\t\t},\n\t\tpixelBoxStyles: function() {\n\t\t\tcomputeStyleTests();\n\t\t\treturn pixelBoxStylesVal;\n\t\t},\n\t\tpixelPosition: function() {\n\t\t\tcomputeStyleTests();\n\t\t\treturn pixelPositionVal;\n\t\t},\n\t\treliableMarginLeft: function() {\n\t\t\tcomputeStyleTests();\n\t\t\treturn reliableMarginLeftVal;\n\t\t},\n\t\tscrollboxSize: function() {\n\t\t\tcomputeStyleTests();\n\t\t\treturn scrollboxSizeVal;\n\t\t},\n\n\t\t// Support: IE 9 - 11+, Edge 15 - 18+\n\t\t// IE/Edge misreport `getComputedStyle` of table rows with width/height\n\t\t// set in CSS while `offset*` properties report correct values.\n\t\t// Behavior in IE 9 is more subtle than in newer versions & it passes\n\t\t// some versions of this test; make sure not to make it pass there!\n\t\t//\n\t\t// Support: Firefox 70+\n\t\t// Only Firefox includes border widths\n\t\t// in computed dimensions. (gh-4529)\n\t\treliableTrDimensions: function() {\n\t\t\tvar table, tr, trChild, trStyle;\n\t\t\tif ( reliableTrDimensionsVal == null ) {\n\t\t\t\ttable = document.createElement( \"table\" );\n\t\t\t\ttr = document.createElement( \"tr\" );\n\t\t\t\ttrChild = document.createElement( \"div\" );\n\n\t\t\t\ttable.style.cssText = \"position:absolute;left:-11111px;border-collapse:separate\";\n\t\t\t\ttr.style.cssText = \"border:1px solid\";\n\n\t\t\t\t// Support: Chrome 86+\n\t\t\t\t// Height set through cssText does not get applied.\n\t\t\t\t// Computed height then comes back as 0.\n\t\t\t\ttr.style.height = \"1px\";\n\t\t\t\ttrChild.style.height = \"9px\";\n\n\t\t\t\t// Support: Android 8 Chrome 86+\n\t\t\t\t// In our bodyBackground.html iframe,\n\t\t\t\t// display for all div elements is set to \"inline\",\n\t\t\t\t// which causes a problem only in Android 8 Chrome 86.\n\t\t\t\t// Ensuring the div is display: block\n\t\t\t\t// gets around this issue.\n\t\t\t\ttrChild.style.display = \"block\";\n\n\t\t\t\tdocumentElement\n\t\t\t\t\t.appendChild( table )\n\t\t\t\t\t.appendChild( tr )\n\t\t\t\t\t.appendChild( trChild );\n\n\t\t\t\ttrStyle = window.getComputedStyle( tr );\n\t\t\t\treliableTrDimensionsVal = ( parseInt( trStyle.height, 10 ) +\n\t\t\t\t\tparseInt( trStyle.borderTopWidth, 10 ) +\n\t\t\t\t\tparseInt( trStyle.borderBottomWidth, 10 ) ) === tr.offsetHeight;\n\n\t\t\t\tdocumentElement.removeChild( table );\n\t\t\t}\n\t\t\treturn reliableTrDimensionsVal;\n\t\t}\n\t} );\n} )();\n\n\nfunction curCSS( elem, name, computed ) {\n\tvar width, minWidth, maxWidth, ret,\n\n\t\t// Support: Firefox 51+\n\t\t// Retrieving style before computed somehow\n\t\t// fixes an issue with getting wrong values\n\t\t// on detached elements\n\t\tstyle = elem.style;\n\n\tcomputed = computed || getStyles( elem );\n\n\t// getPropertyValue is needed for:\n\t// .css('filter') (IE 9 only, #12537)\n\t// .css('--customProperty) (#3144)\n\tif ( computed ) {\n\t\tret = computed.getPropertyValue( name ) || computed[ name ];\n\n\t\tif ( ret === \"\" && !isAttached( elem ) ) {\n\t\t\tret = jQuery.style( elem, name );\n\t\t}\n\n\t\t// A tribute to the \"awesome hack by Dean Edwards\"\n\t\t// Android Browser returns percentage for some values,\n\t\t// but width seems to be reliably pixels.\n\t\t// This is against the CSSOM draft spec:\n\t\t// https://drafts.csswg.org/cssom/#resolved-values\n\t\tif ( !support.pixelBoxStyles() && rnumnonpx.test( ret ) && rboxStyle.test( name ) ) {\n\n\t\t\t// Remember the original values\n\t\t\twidth = style.width;\n\t\t\tminWidth = style.minWidth;\n\t\t\tmaxWidth = style.maxWidth;\n\n\t\t\t// Put in the new values to get a computed value out\n\t\t\tstyle.minWidth = style.maxWidth = style.width = ret;\n\t\t\tret = computed.width;\n\n\t\t\t// Revert the changed values\n\t\t\tstyle.width = width;\n\t\t\tstyle.minWidth = minWidth;\n\t\t\tstyle.maxWidth = maxWidth;\n\t\t}\n\t}\n\n\treturn ret !== undefined ?\n\n\t\t// Support: IE <=9 - 11 only\n\t\t// IE returns zIndex value as an integer.\n\t\tret + \"\" :\n\t\tret;\n}\n\n\nfunction addGetHookIf( conditionFn, hookFn ) {\n\n\t// Define the hook, we'll check on the first run if it's really needed.\n\treturn {\n\t\tget: function() {\n\t\t\tif ( conditionFn() ) {\n\n\t\t\t\t// Hook not needed (or it's not possible to use it due\n\t\t\t\t// to missing dependency), remove it.\n\t\t\t\tdelete this.get;\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\t// Hook needed; redefine it so that the support test is not executed again.\n\t\t\treturn ( this.get = hookFn ).apply( this, arguments );\n\t\t}\n\t};\n}\n\n\nvar cssPrefixes = [ \"Webkit\", \"Moz\", \"ms\" ],\n\temptyStyle = document.createElement( \"div\" ).style,\n\tvendorProps = {};\n\n// Return a vendor-prefixed property or undefined\nfunction vendorPropName( name ) {\n\n\t// Check for vendor prefixed names\n\tvar capName = name[ 0 ].toUpperCase() + name.slice( 1 ),\n\t\ti = cssPrefixes.length;\n\n\twhile ( i-- ) {\n\t\tname = cssPrefixes[ i ] + capName;\n\t\tif ( name in emptyStyle ) {\n\t\t\treturn name;\n\t\t}\n\t}\n}\n\n// Return a potentially-mapped jQuery.cssProps or vendor prefixed property\nfunction finalPropName( name ) {\n\tvar final = jQuery.cssProps[ name ] || vendorProps[ name ];\n\n\tif ( final ) {\n\t\treturn final;\n\t}\n\tif ( name in emptyStyle ) {\n\t\treturn name;\n\t}\n\treturn vendorProps[ name ] = vendorPropName( name ) || name;\n}\n\n\nvar\n\n\t// Swappable if display is none or starts with table\n\t// except \"table\", \"table-cell\", or \"table-caption\"\n\t// See here for display values: https://developer.mozilla.org/en-US/docs/CSS/display\n\trdisplayswap = /^(none|table(?!-c[ea]).+)/,\n\trcustomProp = /^--/,\n\tcssShow = { position: \"absolute\", visibility: \"hidden\", display: \"block\" },\n\tcssNormalTransform = {\n\t\tletterSpacing: \"0\",\n\t\tfontWeight: \"400\"\n\t};\n\nfunction setPositiveNumber( _elem, value, subtract ) {\n\n\t// Any relative (+/-) values have already been\n\t// normalized at this point\n\tvar matches = rcssNum.exec( value );\n\treturn matches ?\n\n\t\t// Guard against undefined \"subtract\", e.g., when used as in cssHooks\n\t\tMath.max( 0, matches[ 2 ] - ( subtract || 0 ) ) + ( matches[ 3 ] || \"px\" ) :\n\t\tvalue;\n}\n\nfunction boxModelAdjustment( elem, dimension, box, isBorderBox, styles, computedVal ) {\n\tvar i = dimension === \"width\" ? 1 : 0,\n\t\textra = 0,\n\t\tdelta = 0;\n\n\t// Adjustment may not be necessary\n\tif ( box === ( isBorderBox ? \"border\" : \"content\" ) ) {\n\t\treturn 0;\n\t}\n\n\tfor ( ; i < 4; i += 2 ) {\n\n\t\t// Both box models exclude margin\n\t\tif ( box === \"margin\" ) {\n\t\t\tdelta += jQuery.css( elem, box + cssExpand[ i ], true, styles );\n\t\t}\n\n\t\t// If we get here with a content-box, we're seeking \"padding\" or \"border\" or \"margin\"\n\t\tif ( !isBorderBox ) {\n\n\t\t\t// Add padding\n\t\t\tdelta += jQuery.css( elem, \"padding\" + cssExpand[ i ], true, styles );\n\n\t\t\t// For \"border\" or \"margin\", add border\n\t\t\tif ( box !== \"padding\" ) {\n\t\t\t\tdelta += jQuery.css( elem, \"border\" + cssExpand[ i ] + \"Width\", true, styles );\n\n\t\t\t// But still keep track of it otherwise\n\t\t\t} else {\n\t\t\t\textra += jQuery.css( elem, \"border\" + cssExpand[ i ] + \"Width\", true, styles );\n\t\t\t}\n\n\t\t// If we get here with a border-box (content + padding + border), we're seeking \"content\" or\n\t\t// \"padding\" or \"margin\"\n\t\t} else {\n\n\t\t\t// For \"content\", subtract padding\n\t\t\tif ( box === \"content\" ) {\n\t\t\t\tdelta -= jQuery.css( elem, \"padding\" + cssExpand[ i ], true, styles );\n\t\t\t}\n\n\t\t\t// For \"content\" or \"padding\", subtract border\n\t\t\tif ( box !== \"margin\" ) {\n\t\t\t\tdelta -= jQuery.css( elem, \"border\" + cssExpand[ i ] + \"Width\", true, styles );\n\t\t\t}\n\t\t}\n\t}\n\n\t// Account for positive content-box scroll gutter when requested by providing computedVal\n\tif ( !isBorderBox && computedVal >= 0 ) {\n\n\t\t// offsetWidth/offsetHeight is a rounded sum of content, padding, scroll gutter, and border\n\t\t// Assuming integer scroll gutter, subtract the rest and round down\n\t\tdelta += Math.max( 0, Math.ceil(\n\t\t\telem[ \"offset\" + dimension[ 0 ].toUpperCase() + dimension.slice( 1 ) ] -\n\t\t\tcomputedVal -\n\t\t\tdelta -\n\t\t\textra -\n\t\t\t0.5\n\n\t\t// If offsetWidth/offsetHeight is unknown, then we can't determine content-box scroll gutter\n\t\t// Use an explicit zero to avoid NaN (gh-3964)\n\t\t) ) || 0;\n\t}\n\n\treturn delta;\n}\n\nfunction getWidthOrHeight( elem, dimension, extra ) {\n\n\t// Start with computed style\n\tvar styles = getStyles( elem ),\n\n\t\t// To avoid forcing a reflow, only fetch boxSizing if we need it (gh-4322).\n\t\t// Fake content-box until we know it's needed to know the true value.\n\t\tboxSizingNeeded = !support.boxSizingReliable() || extra,\n\t\tisBorderBox = boxSizingNeeded &&\n\t\t\tjQuery.css( elem, \"boxSizing\", false, styles ) === \"border-box\",\n\t\tvalueIsBorderBox = isBorderBox,\n\n\t\tval = curCSS( elem, dimension, styles ),\n\t\toffsetProp = \"offset\" + dimension[ 0 ].toUpperCase() + dimension.slice( 1 );\n\n\t// Support: Firefox <=54\n\t// Return a confounding non-pixel value or feign ignorance, as appropriate.\n\tif ( rnumnonpx.test( val ) ) {\n\t\tif ( !extra ) {\n\t\t\treturn val;\n\t\t}\n\t\tval = \"auto\";\n\t}\n\n\n\t// Support: IE 9 - 11 only\n\t// Use offsetWidth/offsetHeight for when box sizing is unreliable.\n\t// In those cases, the computed value can be trusted to be border-box.\n\tif ( ( !support.boxSizingReliable() && isBorderBox ||\n\n\t\t// Support: IE 10 - 11+, Edge 15 - 18+\n\t\t// IE/Edge misreport `getComputedStyle` of table rows with width/height\n\t\t// set in CSS while `offset*` properties report correct values.\n\t\t// Interestingly, in some cases IE 9 doesn't suffer from this issue.\n\t\t!support.reliableTrDimensions() && nodeName( elem, \"tr\" ) ||\n\n\t\t// Fall back to offsetWidth/offsetHeight when value is \"auto\"\n\t\t// This happens for inline elements with no explicit setting (gh-3571)\n\t\tval === \"auto\" ||\n\n\t\t// Support: Android <=4.1 - 4.3 only\n\t\t// Also use offsetWidth/offsetHeight for misreported inline dimensions (gh-3602)\n\t\t!parseFloat( val ) && jQuery.css( elem, \"display\", false, styles ) === \"inline\" ) &&\n\n\t\t// Make sure the element is visible & connected\n\t\telem.getClientRects().length ) {\n\n\t\tisBorderBox = jQuery.css( elem, \"boxSizing\", false, styles ) === \"border-box\";\n\n\t\t// Where available, offsetWidth/offsetHeight approximate border box dimensions.\n\t\t// Where not available (e.g., SVG), assume unreliable box-sizing and interpret the\n\t\t// retrieved value as a content box dimension.\n\t\tvalueIsBorderBox = offsetProp in elem;\n\t\tif ( valueIsBorderBox ) {\n\t\t\tval = elem[ offsetProp ];\n\t\t}\n\t}\n\n\t// Normalize \"\" and auto\n\tval = parseFloat( val ) || 0;\n\n\t// Adjust for the element's box model\n\treturn ( val +\n\t\tboxModelAdjustment(\n\t\t\telem,\n\t\t\tdimension,\n\t\t\textra || ( isBorderBox ? \"border\" : \"content\" ),\n\t\t\tvalueIsBorderBox,\n\t\t\tstyles,\n\n\t\t\t// Provide the current computed size to request scroll gutter calculation (gh-3589)\n\t\t\tval\n\t\t)\n\t) + \"px\";\n}\n\njQuery.extend( {\n\n\t// Add in style property hooks for overriding the default\n\t// behavior of getting and setting a style property\n\tcssHooks: {\n\t\topacity: {\n\t\t\tget: function( elem, computed ) {\n\t\t\t\tif ( computed ) {\n\n\t\t\t\t\t// We should always get a number back from opacity\n\t\t\t\t\tvar ret = curCSS( elem, \"opacity\" );\n\t\t\t\t\treturn ret === \"\" ? \"1\" : ret;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t},\n\n\t// Don't automatically add \"px\" to these possibly-unitless properties\n\tcssNumber: {\n\t\t\"animationIterationCount\": true,\n\t\t\"columnCount\": true,\n\t\t\"fillOpacity\": true,\n\t\t\"flexGrow\": true,\n\t\t\"flexShrink\": true,\n\t\t\"fontWeight\": true,\n\t\t\"gridArea\": true,\n\t\t\"gridColumn\": true,\n\t\t\"gridColumnEnd\": true,\n\t\t\"gridColumnStart\": true,\n\t\t\"gridRow\": true,\n\t\t\"gridRowEnd\": true,\n\t\t\"gridRowStart\": true,\n\t\t\"lineHeight\": true,\n\t\t\"opacity\": true,\n\t\t\"order\": true,\n\t\t\"orphans\": true,\n\t\t\"widows\": true,\n\t\t\"zIndex\": true,\n\t\t\"zoom\": true\n\t},\n\n\t// Add in properties whose names you wish to fix before\n\t// setting or getting the value\n\tcssProps: {},\n\n\t// Get and set the style property on a DOM Node\n\tstyle: function( elem, name, value, extra ) {\n\n\t\t// Don't set styles on text and comment nodes\n\t\tif ( !elem || elem.nodeType === 3 || elem.nodeType === 8 || !elem.style ) {\n\t\t\treturn;\n\t\t}\n\n\t\t// Make sure that we're working with the right name\n\t\tvar ret, type, hooks,\n\t\t\torigName = camelCase( name ),\n\t\t\tisCustomProp = rcustomProp.test( name ),\n\t\t\tstyle = elem.style;\n\n\t\t// Make sure that we're working with the right name. We don't\n\t\t// want to query the value if it is a CSS custom property\n\t\t// since they are user-defined.\n\t\tif ( !isCustomProp ) {\n\t\t\tname = finalPropName( origName );\n\t\t}\n\n\t\t// Gets hook for the prefixed version, then unprefixed version\n\t\thooks = jQuery.cssHooks[ name ] || jQuery.cssHooks[ origName ];\n\n\t\t// Check if we're setting a value\n\t\tif ( value !== undefined ) {\n\t\t\ttype = typeof value;\n\n\t\t\t// Convert \"+=\" or \"-=\" to relative numbers (#7345)\n\t\t\tif ( type === \"string\" && ( ret = rcssNum.exec( value ) ) && ret[ 1 ] ) {\n\t\t\t\tvalue = adjustCSS( elem, name, ret );\n\n\t\t\t\t// Fixes bug #9237\n\t\t\t\ttype = \"number\";\n\t\t\t}\n\n\t\t\t// Make sure that null and NaN values aren't set (#7116)\n\t\t\tif ( value == null || value !== value ) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\t// If a number was passed in, add the unit (except for certain CSS properties)\n\t\t\t// The isCustomProp check can be removed in jQuery 4.0 when we only auto-append\n\t\t\t// \"px\" to a few hardcoded values.\n\t\t\tif ( type === \"number\" && !isCustomProp ) {\n\t\t\t\tvalue += ret && ret[ 3 ] || ( jQuery.cssNumber[ origName ] ? \"\" : \"px\" );\n\t\t\t}\n\n\t\t\t// background-* props affect original clone's values\n\t\t\tif ( !support.clearCloneStyle && value === \"\" && name.indexOf( \"background\" ) === 0 ) {\n\t\t\t\tstyle[ name ] = \"inherit\";\n\t\t\t}\n\n\t\t\t// If a hook was provided, use that value, otherwise just set the specified value\n\t\t\tif ( !hooks || !( \"set\" in hooks ) ||\n\t\t\t\t( value = hooks.set( elem, value, extra ) ) !== undefined ) {\n\n\t\t\t\tif ( isCustomProp ) {\n\t\t\t\t\tstyle.setProperty( name, value );\n\t\t\t\t} else {\n\t\t\t\t\tstyle[ name ] = value;\n\t\t\t\t}\n\t\t\t}\n\n\t\t} else {\n\n\t\t\t// If a hook was provided get the non-computed value from there\n\t\t\tif ( hooks && \"get\" in hooks &&\n\t\t\t\t( ret = hooks.get( elem, false, extra ) ) !== undefined ) {\n\n\t\t\t\treturn ret;\n\t\t\t}\n\n\t\t\t// Otherwise just get the value from the style object\n\t\t\treturn style[ name ];\n\t\t}\n\t},\n\n\tcss: function( elem, name, extra, styles ) {\n\t\tvar val, num, hooks,\n\t\t\torigName = camelCase( name ),\n\t\t\tisCustomProp = rcustomProp.test( name );\n\n\t\t// Make sure that we're working with the right name. We don't\n\t\t// want to modify the value if it is a CSS custom property\n\t\t// since they are user-defined.\n\t\tif ( !isCustomProp ) {\n\t\t\tname = finalPropName( origName );\n\t\t}\n\n\t\t// Try prefixed name followed by the unprefixed name\n\t\thooks = jQuery.cssHooks[ name ] || jQuery.cssHooks[ origName ];\n\n\t\t// If a hook was provided get the computed value from there\n\t\tif ( hooks && \"get\" in hooks ) {\n\t\t\tval = hooks.get( elem, true, extra );\n\t\t}\n\n\t\t// Otherwise, if a way to get the computed value exists, use that\n\t\tif ( val === undefined ) {\n\t\t\tval = curCSS( elem, name, styles );\n\t\t}\n\n\t\t// Convert \"normal\" to computed value\n\t\tif ( val === \"normal\" && name in cssNormalTransform ) {\n\t\t\tval = cssNormalTransform[ name ];\n\t\t}\n\n\t\t// Make numeric if forced or a qualifier was provided and val looks numeric\n\t\tif ( extra === \"\" || extra ) {\n\t\t\tnum = parseFloat( val );\n\t\t\treturn extra === true || isFinite( num ) ? num || 0 : val;\n\t\t}\n\n\t\treturn val;\n\t}\n} );\n\njQuery.each( [ \"height\", \"width\" ], function( _i, dimension ) {\n\tjQuery.cssHooks[ dimension ] = {\n\t\tget: function( elem, computed, extra ) {\n\t\t\tif ( computed ) {\n\n\t\t\t\t// Certain elements can have dimension info if we invisibly show them\n\t\t\t\t// but it must have a current display style that would benefit\n\t\t\t\treturn rdisplayswap.test( jQuery.css( elem, \"display\" ) ) &&\n\n\t\t\t\t\t// Support: Safari 8+\n\t\t\t\t\t// Table columns in Safari have non-zero offsetWidth & zero\n\t\t\t\t\t// getBoundingClientRect().width unless display is changed.\n\t\t\t\t\t// Support: IE <=11 only\n\t\t\t\t\t// Running getBoundingClientRect on a disconnected node\n\t\t\t\t\t// in IE throws an error.\n\t\t\t\t\t( !elem.getClientRects().length || !elem.getBoundingClientRect().width ) ?\n\t\t\t\t\tswap( elem, cssShow, function() {\n\t\t\t\t\t\treturn getWidthOrHeight( elem, dimension, extra );\n\t\t\t\t\t} ) :\n\t\t\t\t\tgetWidthOrHeight( elem, dimension, extra );\n\t\t\t}\n\t\t},\n\n\t\tset: function( elem, value, extra ) {\n\t\t\tvar matches,\n\t\t\t\tstyles = getStyles( elem ),\n\n\t\t\t\t// Only read styles.position if the test has a chance to fail\n\t\t\t\t// to avoid forcing a reflow.\n\t\t\t\tscrollboxSizeBuggy = !support.scrollboxSize() &&\n\t\t\t\t\tstyles.position === \"absolute\",\n\n\t\t\t\t// To avoid forcing a reflow, only fetch boxSizing if we need it (gh-3991)\n\t\t\t\tboxSizingNeeded = scrollboxSizeBuggy || extra,\n\t\t\t\tisBorderBox = boxSizingNeeded &&\n\t\t\t\t\tjQuery.css( elem, \"boxSizing\", false, styles ) === \"border-box\",\n\t\t\t\tsubtract = extra ?\n\t\t\t\t\tboxModelAdjustment(\n\t\t\t\t\t\telem,\n\t\t\t\t\t\tdimension,\n\t\t\t\t\t\textra,\n\t\t\t\t\t\tisBorderBox,\n\t\t\t\t\t\tstyles\n\t\t\t\t\t) :\n\t\t\t\t\t0;\n\n\t\t\t// Account for unreliable border-box dimensions by comparing offset* to computed and\n\t\t\t// faking a content-box to get border and padding (gh-3699)\n\t\t\tif ( isBorderBox && scrollboxSizeBuggy ) {\n\t\t\t\tsubtract -= Math.ceil(\n\t\t\t\t\telem[ \"offset\" + dimension[ 0 ].toUpperCase() + dimension.slice( 1 ) ] -\n\t\t\t\t\tparseFloat( styles[ dimension ] ) -\n\t\t\t\t\tboxModelAdjustment( elem, dimension, \"border\", false, styles ) -\n\t\t\t\t\t0.5\n\t\t\t\t);\n\t\t\t}\n\n\t\t\t// Convert to pixels if value adjustment is needed\n\t\t\tif ( subtract && ( matches = rcssNum.exec( value ) ) &&\n\t\t\t\t( matches[ 3 ] || \"px\" ) !== \"px\" ) {\n\n\t\t\t\telem.style[ dimension ] = value;\n\t\t\t\tvalue = jQuery.css( elem, dimension );\n\t\t\t}\n\n\t\t\treturn setPositiveNumber( elem, value, subtract );\n\t\t}\n\t};\n} );\n\njQuery.cssHooks.marginLeft = addGetHookIf( support.reliableMarginLeft,\n\tfunction( elem, computed ) {\n\t\tif ( computed ) {\n\t\t\treturn ( parseFloat( curCSS( elem, \"marginLeft\" ) ) ||\n\t\t\t\telem.getBoundingClientRect().left -\n\t\t\t\t\tswap( elem, { marginLeft: 0 }, function() {\n\t\t\t\t\t\treturn elem.getBoundingClientRect().left;\n\t\t\t\t\t} )\n\t\t\t) + \"px\";\n\t\t}\n\t}\n);\n\n// These hooks are used by animate to expand properties\njQuery.each( {\n\tmargin: \"\",\n\tpadding: \"\",\n\tborder: \"Width\"\n}, function( prefix, suffix ) {\n\tjQuery.cssHooks[ prefix + suffix ] = {\n\t\texpand: function( value ) {\n\t\t\tvar i = 0,\n\t\t\t\texpanded = {},\n\n\t\t\t\t// Assumes a single number if not a string\n\t\t\t\tparts = typeof value === \"string\" ? value.split( \" \" ) : [ value ];\n\n\t\t\tfor ( ; i < 4; i++ ) {\n\t\t\t\texpanded[ prefix + cssExpand[ i ] + suffix ] =\n\t\t\t\t\tparts[ i ] || parts[ i - 2 ] || parts[ 0 ];\n\t\t\t}\n\n\t\t\treturn expanded;\n\t\t}\n\t};\n\n\tif ( prefix !== \"margin\" ) {\n\t\tjQuery.cssHooks[ prefix + suffix ].set = setPositiveNumber;\n\t}\n} );\n\njQuery.fn.extend( {\n\tcss: function( name, value ) {\n\t\treturn access( this, function( elem, name, value ) {\n\t\t\tvar styles, len,\n\t\t\t\tmap = {},\n\t\t\t\ti = 0;\n\n\t\t\tif ( Array.isArray( name ) ) {\n\t\t\t\tstyles = getStyles( elem );\n\t\t\t\tlen = name.length;\n\n\t\t\t\tfor ( ; i < len; i++ ) {\n\t\t\t\t\tmap[ name[ i ] ] = jQuery.css( elem, name[ i ], false, styles );\n\t\t\t\t}\n\n\t\t\t\treturn map;\n\t\t\t}\n\n\t\t\treturn value !== undefined ?\n\t\t\t\tjQuery.style( elem, name, value ) :\n\t\t\t\tjQuery.css( elem, name );\n\t\t}, name, value, arguments.length > 1 );\n\t}\n} );\n\n\nfunction Tween( elem, options, prop, end, easing ) {\n\treturn new Tween.prototype.init( elem, options, prop, end, easing );\n}\njQuery.Tween = Tween;\n\nTween.prototype = {\n\tconstructor: Tween,\n\tinit: function( elem, options, prop, end, easing, unit ) {\n\t\tthis.elem = elem;\n\t\tthis.prop = prop;\n\t\tthis.easing = easing || jQuery.easing._default;\n\t\tthis.options = options;\n\t\tthis.start = this.now = this.cur();\n\t\tthis.end = end;\n\t\tthis.unit = unit || ( jQuery.cssNumber[ prop ] ? \"\" : \"px\" );\n\t},\n\tcur: function() {\n\t\tvar hooks = Tween.propHooks[ this.prop ];\n\n\t\treturn hooks && hooks.get ?\n\t\t\thooks.get( this ) :\n\t\t\tTween.propHooks._default.get( this );\n\t},\n\trun: function( percent ) {\n\t\tvar eased,\n\t\t\thooks = Tween.propHooks[ this.prop ];\n\n\t\tif ( this.options.duration ) {\n\t\t\tthis.pos = eased = jQuery.easing[ this.easing ](\n\t\t\t\tpercent, this.options.duration * percent, 0, 1, this.options.duration\n\t\t\t);\n\t\t} else {\n\t\t\tthis.pos = eased = percent;\n\t\t}\n\t\tthis.now = ( this.end - this.start ) * eased + this.start;\n\n\t\tif ( this.options.step ) {\n\t\t\tthis.options.step.call( this.elem, this.now, this );\n\t\t}\n\n\t\tif ( hooks && hooks.set ) {\n\t\t\thooks.set( this );\n\t\t} else {\n\t\t\tTween.propHooks._default.set( this );\n\t\t}\n\t\treturn this;\n\t}\n};\n\nTween.prototype.init.prototype = Tween.prototype;\n\nTween.propHooks = {\n\t_default: {\n\t\tget: function( tween ) {\n\t\t\tvar result;\n\n\t\t\t// Use a property on the element directly when it is not a DOM element,\n\t\t\t// or when there is no matching style property that exists.\n\t\t\tif ( tween.elem.nodeType !== 1 ||\n\t\t\t\ttween.elem[ tween.prop ] != null && tween.elem.style[ tween.prop ] == null ) {\n\t\t\t\treturn tween.elem[ tween.prop ];\n\t\t\t}\n\n\t\t\t// Passing an empty string as a 3rd parameter to .css will automatically\n\t\t\t// attempt a parseFloat and fallback to a string if the parse fails.\n\t\t\t// Simple values such as \"10px\" are parsed to Float;\n\t\t\t// complex values such as \"rotate(1rad)\" are returned as-is.\n\t\t\tresult = jQuery.css( tween.elem, tween.prop, \"\" );\n\n\t\t\t// Empty strings, null, undefined and \"auto\" are converted to 0.\n\t\t\treturn !result || result === \"auto\" ? 0 : result;\n\t\t},\n\t\tset: function( tween ) {\n\n\t\t\t// Use step hook for back compat.\n\t\t\t// Use cssHook if its there.\n\t\t\t// Use .style if available and use plain properties where available.\n\t\t\tif ( jQuery.fx.step[ tween.prop ] ) {\n\t\t\t\tjQuery.fx.step[ tween.prop ]( tween );\n\t\t\t} else if ( tween.elem.nodeType === 1 && (\n\t\t\t\tjQuery.cssHooks[ tween.prop ] ||\n\t\t\t\t\ttween.elem.style[ finalPropName( tween.prop ) ] != null ) ) {\n\t\t\t\tjQuery.style( tween.elem, tween.prop, tween.now + tween.unit );\n\t\t\t} else {\n\t\t\t\ttween.elem[ tween.prop ] = tween.now;\n\t\t\t}\n\t\t}\n\t}\n};\n\n// Support: IE <=9 only\n// Panic based approach to setting things on disconnected nodes\nTween.propHooks.scrollTop = Tween.propHooks.scrollLeft = {\n\tset: function( tween ) {\n\t\tif ( tween.elem.nodeType && tween.elem.parentNode ) {\n\t\t\ttween.elem[ tween.prop ] = tween.now;\n\t\t}\n\t}\n};\n\njQuery.easing = {\n\tlinear: function( p ) {\n\t\treturn p;\n\t},\n\tswing: function( p ) {\n\t\treturn 0.5 - Math.cos( p * Math.PI ) / 2;\n\t},\n\t_default: \"swing\"\n};\n\njQuery.fx = Tween.prototype.init;\n\n// Back compat <1.8 extension point\njQuery.fx.step = {};\n\n\n\n\nvar\n\tfxNow, inProgress,\n\trfxtypes = /^(?:toggle|show|hide)$/,\n\trrun = /queueHooks$/;\n\nfunction schedule() {\n\tif ( inProgress ) {\n\t\tif ( document.hidden === false && window.requestAnimationFrame ) {\n\t\t\twindow.requestAnimationFrame( schedule );\n\t\t} else {\n\t\t\twindow.setTimeout( schedule, jQuery.fx.interval );\n\t\t}\n\n\t\tjQuery.fx.tick();\n\t}\n}\n\n// Animations created synchronously will run synchronously\nfunction createFxNow() {\n\twindow.setTimeout( function() {\n\t\tfxNow = undefined;\n\t} );\n\treturn ( fxNow = Date.now() );\n}\n\n// Generate parameters to create a standard animation\nfunction genFx( type, includeWidth ) {\n\tvar which,\n\t\ti = 0,\n\t\tattrs = { height: type };\n\n\t// If we include width, step value is 1 to do all cssExpand values,\n\t// otherwise step value is 2 to skip over Left and Right\n\tincludeWidth = includeWidth ? 1 : 0;\n\tfor ( ; i < 4; i += 2 - includeWidth ) {\n\t\twhich = cssExpand[ i ];\n\t\tattrs[ \"margin\" + which ] = attrs[ \"padding\" + which ] = type;\n\t}\n\n\tif ( includeWidth ) {\n\t\tattrs.opacity = attrs.width = type;\n\t}\n\n\treturn attrs;\n}\n\nfunction createTween( value, prop, animation ) {\n\tvar tween,\n\t\tcollection = ( Animation.tweeners[ prop ] || [] ).concat( Animation.tweeners[ \"*\" ] ),\n\t\tindex = 0,\n\t\tlength = collection.length;\n\tfor ( ; index < length; index++ ) {\n\t\tif ( ( tween = collection[ index ].call( animation, prop, value ) ) ) {\n\n\t\t\t// We're done with this property\n\t\t\treturn tween;\n\t\t}\n\t}\n}\n\nfunction defaultPrefilter( elem, props, opts ) {\n\tvar prop, value, toggle, hooks, oldfire, propTween, restoreDisplay, display,\n\t\tisBox = \"width\" in props || \"height\" in props,\n\t\tanim = this,\n\t\torig = {},\n\t\tstyle = elem.style,\n\t\thidden = elem.nodeType && isHiddenWithinTree( elem ),\n\t\tdataShow = dataPriv.get( elem, \"fxshow\" );\n\n\t// Queue-skipping animations hijack the fx hooks\n\tif ( !opts.queue ) {\n\t\thooks = jQuery._queueHooks( elem, \"fx\" );\n\t\tif ( hooks.unqueued == null ) {\n\t\t\thooks.unqueued = 0;\n\t\t\toldfire = hooks.empty.fire;\n\t\t\thooks.empty.fire = function() {\n\t\t\t\tif ( !hooks.unqueued ) {\n\t\t\t\t\toldfire();\n\t\t\t\t}\n\t\t\t};\n\t\t}\n\t\thooks.unqueued++;\n\n\t\tanim.always( function() {\n\n\t\t\t// Ensure the complete handler is called before this completes\n\t\t\tanim.always( function() {\n\t\t\t\thooks.unqueued--;\n\t\t\t\tif ( !jQuery.queue( elem, \"fx\" ).length ) {\n\t\t\t\t\thooks.empty.fire();\n\t\t\t\t}\n\t\t\t} );\n\t\t} );\n\t}\n\n\t// Detect show/hide animations\n\tfor ( prop in props ) {\n\t\tvalue = props[ prop ];\n\t\tif ( rfxtypes.test( value ) ) {\n\t\t\tdelete props[ prop ];\n\t\t\ttoggle = toggle || value === \"toggle\";\n\t\t\tif ( value === ( hidden ? \"hide\" : \"show\" ) ) {\n\n\t\t\t\t// Pretend to be hidden if this is a \"show\" and\n\t\t\t\t// there is still data from a stopped show/hide\n\t\t\t\tif ( value === \"show\" && dataShow && dataShow[ prop ] !== undefined ) {\n\t\t\t\t\thidden = true;\n\n\t\t\t\t// Ignore all other no-op show/hide data\n\t\t\t\t} else {\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\t\t\t}\n\t\t\torig[ prop ] = dataShow && dataShow[ prop ] || jQuery.style( elem, prop );\n\t\t}\n\t}\n\n\t// Bail out if this is a no-op like .hide().hide()\n\tpropTween = !jQuery.isEmptyObject( props );\n\tif ( !propTween && jQuery.isEmptyObject( orig ) ) {\n\t\treturn;\n\t}\n\n\t// Restrict \"overflow\" and \"display\" styles during box animations\n\tif ( isBox && elem.nodeType === 1 ) {\n\n\t\t// Support: IE <=9 - 11, Edge 12 - 15\n\t\t// Record all 3 overflow attributes because IE does not infer the shorthand\n\t\t// from identically-valued overflowX and overflowY and Edge just mirrors\n\t\t// the overflowX value there.\n\t\topts.overflow = [ style.overflow, style.overflowX, style.overflowY ];\n\n\t\t// Identify a display type, preferring old show/hide data over the CSS cascade\n\t\trestoreDisplay = dataShow && dataShow.display;\n\t\tif ( restoreDisplay == null ) {\n\t\t\trestoreDisplay = dataPriv.get( elem, \"display\" );\n\t\t}\n\t\tdisplay = jQuery.css( elem, \"display\" );\n\t\tif ( display === \"none\" ) {\n\t\t\tif ( restoreDisplay ) {\n\t\t\t\tdisplay = restoreDisplay;\n\t\t\t} else {\n\n\t\t\t\t// Get nonempty value(s) by temporarily forcing visibility\n\t\t\t\tshowHide( [ elem ], true );\n\t\t\t\trestoreDisplay = elem.style.display || restoreDisplay;\n\t\t\t\tdisplay = jQuery.css( elem, \"display\" );\n\t\t\t\tshowHide( [ elem ] );\n\t\t\t}\n\t\t}\n\n\t\t// Animate inline elements as inline-block\n\t\tif ( display === \"inline\" || display === \"inline-block\" && restoreDisplay != null ) {\n\t\t\tif ( jQuery.css( elem, \"float\" ) === \"none\" ) {\n\n\t\t\t\t// Restore the original display value at the end of pure show/hide animations\n\t\t\t\tif ( !propTween ) {\n\t\t\t\t\tanim.done( function() {\n\t\t\t\t\t\tstyle.display = restoreDisplay;\n\t\t\t\t\t} );\n\t\t\t\t\tif ( restoreDisplay == null ) {\n\t\t\t\t\t\tdisplay = style.display;\n\t\t\t\t\t\trestoreDisplay = display === \"none\" ? \"\" : display;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tstyle.display = \"inline-block\";\n\t\t\t}\n\t\t}\n\t}\n\n\tif ( opts.overflow ) {\n\t\tstyle.overflow = \"hidden\";\n\t\tanim.always( function() {\n\t\t\tstyle.overflow = opts.overflow[ 0 ];\n\t\t\tstyle.overflowX = opts.overflow[ 1 ];\n\t\t\tstyle.overflowY = opts.overflow[ 2 ];\n\t\t} );\n\t}\n\n\t// Implement show/hide animations\n\tpropTween = false;\n\tfor ( prop in orig ) {\n\n\t\t// General show/hide setup for this element animation\n\t\tif ( !propTween ) {\n\t\t\tif ( dataShow ) {\n\t\t\t\tif ( \"hidden\" in dataShow ) {\n\t\t\t\t\thidden = dataShow.hidden;\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tdataShow = dataPriv.access( elem, \"fxshow\", { display: restoreDisplay } );\n\t\t\t}\n\n\t\t\t// Store hidden/visible for toggle so `.stop().toggle()` \"reverses\"\n\t\t\tif ( toggle ) {\n\t\t\t\tdataShow.hidden = !hidden;\n\t\t\t}\n\n\t\t\t// Show elements before animating them\n\t\t\tif ( hidden ) {\n\t\t\t\tshowHide( [ elem ], true );\n\t\t\t}\n\n\t\t\t/* eslint-disable no-loop-func */\n\n\t\t\tanim.done( function() {\n\n\t\t\t\t/* eslint-enable no-loop-func */\n\n\t\t\t\t// The final step of a \"hide\" animation is actually hiding the element\n\t\t\t\tif ( !hidden ) {\n\t\t\t\t\tshowHide( [ elem ] );\n\t\t\t\t}\n\t\t\t\tdataPriv.remove( elem, \"fxshow\" );\n\t\t\t\tfor ( prop in orig ) {\n\t\t\t\t\tjQuery.style( elem, prop, orig[ prop ] );\n\t\t\t\t}\n\t\t\t} );\n\t\t}\n\n\t\t// Per-property setup\n\t\tpropTween = createTween( hidden ? dataShow[ prop ] : 0, prop, anim );\n\t\tif ( !( prop in dataShow ) ) {\n\t\t\tdataShow[ prop ] = propTween.start;\n\t\t\tif ( hidden ) {\n\t\t\t\tpropTween.end = propTween.start;\n\t\t\t\tpropTween.start = 0;\n\t\t\t}\n\t\t}\n\t}\n}\n\nfunction propFilter( props, specialEasing ) {\n\tvar index, name, easing, value, hooks;\n\n\t// camelCase, specialEasing and expand cssHook pass\n\tfor ( index in props ) {\n\t\tname = camelCase( index );\n\t\teasing = specialEasing[ name ];\n\t\tvalue = props[ index ];\n\t\tif ( Array.isArray( value ) ) {\n\t\t\teasing = value[ 1 ];\n\t\t\tvalue = props[ index ] = value[ 0 ];\n\t\t}\n\n\t\tif ( index !== name ) {\n\t\t\tprops[ name ] = value;\n\t\t\tdelete props[ index ];\n\t\t}\n\n\t\thooks = jQuery.cssHooks[ name ];\n\t\tif ( hooks && \"expand\" in hooks ) {\n\t\t\tvalue = hooks.expand( value );\n\t\t\tdelete props[ name ];\n\n\t\t\t// Not quite $.extend, this won't overwrite existing keys.\n\t\t\t// Reusing 'index' because we have the correct \"name\"\n\t\t\tfor ( index in value ) {\n\t\t\t\tif ( !( index in props ) ) {\n\t\t\t\t\tprops[ index ] = value[ index ];\n\t\t\t\t\tspecialEasing[ index ] = easing;\n\t\t\t\t}\n\t\t\t}\n\t\t} else {\n\t\t\tspecialEasing[ name ] = easing;\n\t\t}\n\t}\n}\n\nfunction Animation( elem, properties, options ) {\n\tvar result,\n\t\tstopped,\n\t\tindex = 0,\n\t\tlength = Animation.prefilters.length,\n\t\tdeferred = jQuery.Deferred().always( function() {\n\n\t\t\t// Don't match elem in the :animated selector\n\t\t\tdelete tick.elem;\n\t\t} ),\n\t\ttick = function() {\n\t\t\tif ( stopped ) {\n\t\t\t\treturn false;\n\t\t\t}\n\t\t\tvar currentTime = fxNow || createFxNow(),\n\t\t\t\tremaining = Math.max( 0, animation.startTime + animation.duration - currentTime ),\n\n\t\t\t\t// Support: Android 2.3 only\n\t\t\t\t// Archaic crash bug won't allow us to use `1 - ( 0.5 || 0 )` (#12497)\n\t\t\t\ttemp = remaining / animation.duration || 0,\n\t\t\t\tpercent = 1 - temp,\n\t\t\t\tindex = 0,\n\t\t\t\tlength = animation.tweens.length;\n\n\t\t\tfor ( ; index < length; index++ ) {\n\t\t\t\tanimation.tweens[ index ].run( percent );\n\t\t\t}\n\n\t\t\tdeferred.notifyWith( elem, [ animation, percent, remaining ] );\n\n\t\t\t// If there's more to do, yield\n\t\t\tif ( percent < 1 && length ) {\n\t\t\t\treturn remaining;\n\t\t\t}\n\n\t\t\t// If this was an empty animation, synthesize a final progress notification\n\t\t\tif ( !length ) {\n\t\t\t\tdeferred.notifyWith( elem, [ animation, 1, 0 ] );\n\t\t\t}\n\n\t\t\t// Resolve the animation and report its conclusion\n\t\t\tdeferred.resolveWith( elem, [ animation ] );\n\t\t\treturn false;\n\t\t},\n\t\tanimation = deferred.promise( {\n\t\t\telem: elem,\n\t\t\tprops: jQuery.extend( {}, properties ),\n\t\t\topts: jQuery.extend( true, {\n\t\t\t\tspecialEasing: {},\n\t\t\t\teasing: jQuery.easing._default\n\t\t\t}, options ),\n\t\t\toriginalProperties: properties,\n\t\t\toriginalOptions: options,\n\t\t\tstartTime: fxNow || createFxNow(),\n\t\t\tduration: options.duration,\n\t\t\ttweens: [],\n\t\t\tcreateTween: function( prop, end ) {\n\t\t\t\tvar tween = jQuery.Tween( elem, animation.opts, prop, end,\n\t\t\t\t\tanimation.opts.specialEasing[ prop ] || animation.opts.easing );\n\t\t\t\tanimation.tweens.push( tween );\n\t\t\t\treturn tween;\n\t\t\t},\n\t\t\tstop: function( gotoEnd ) {\n\t\t\t\tvar index = 0,\n\n\t\t\t\t\t// If we are going to the end, we want to run all the tweens\n\t\t\t\t\t// otherwise we skip this part\n\t\t\t\t\tlength = gotoEnd ? animation.tweens.length : 0;\n\t\t\t\tif ( stopped ) {\n\t\t\t\t\treturn this;\n\t\t\t\t}\n\t\t\t\tstopped = true;\n\t\t\t\tfor ( ; index < length; index++ ) {\n\t\t\t\t\tanimation.tweens[ index ].run( 1 );\n\t\t\t\t}\n\n\t\t\t\t// Resolve when we played the last frame; otherwise, reject\n\t\t\t\tif ( gotoEnd ) {\n\t\t\t\t\tdeferred.notifyWith( elem, [ animation, 1, 0 ] );\n\t\t\t\t\tdeferred.resolveWith( elem, [ animation, gotoEnd ] );\n\t\t\t\t} else {\n\t\t\t\t\tdeferred.rejectWith( elem, [ animation, gotoEnd ] );\n\t\t\t\t}\n\t\t\t\treturn this;\n\t\t\t}\n\t\t} ),\n\t\tprops = animation.props;\n\n\tpropFilter( props, animation.opts.specialEasing );\n\n\tfor ( ; index < length; index++ ) {\n\t\tresult = Animation.prefilters[ index ].call( animation, elem, props, animation.opts );\n\t\tif ( result ) {\n\t\t\tif ( isFunction( result.stop ) ) {\n\t\t\t\tjQuery._queueHooks( animation.elem, animation.opts.queue ).stop =\n\t\t\t\t\tresult.stop.bind( result );\n\t\t\t}\n\t\t\treturn result;\n\t\t}\n\t}\n\n\tjQuery.map( props, createTween, animation );\n\n\tif ( isFunction( animation.opts.start ) ) {\n\t\tanimation.opts.start.call( elem, animation );\n\t}\n\n\t// Attach callbacks from options\n\tanimation\n\t\t.progress( animation.opts.progress )\n\t\t.done( animation.opts.done, animation.opts.complete )\n\t\t.fail( animation.opts.fail )\n\t\t.always( animation.opts.always );\n\n\tjQuery.fx.timer(\n\t\tjQuery.extend( tick, {\n\t\t\telem: elem,\n\t\t\tanim: animation,\n\t\t\tqueue: animation.opts.queue\n\t\t} )\n\t);\n\n\treturn animation;\n}\n\njQuery.Animation = jQuery.extend( Animation, {\n\n\ttweeners: {\n\t\t\"*\": [ function( prop, value ) {\n\t\t\tvar tween = this.createTween( prop, value );\n\t\t\tadjustCSS( tween.elem, prop, rcssNum.exec( value ), tween );\n\t\t\treturn tween;\n\t\t} ]\n\t},\n\n\ttweener: function( props, callback ) {\n\t\tif ( isFunction( props ) ) {\n\t\t\tcallback = props;\n\t\t\tprops = [ \"*\" ];\n\t\t} else {\n\t\t\tprops = props.match( rnothtmlwhite );\n\t\t}\n\n\t\tvar prop,\n\t\t\tindex = 0,\n\t\t\tlength = props.length;\n\n\t\tfor ( ; index < length; index++ ) {\n\t\t\tprop = props[ index ];\n\t\t\tAnimation.tweeners[ prop ] = Animation.tweeners[ prop ] || [];\n\t\t\tAnimation.tweeners[ prop ].unshift( callback );\n\t\t}\n\t},\n\n\tprefilters: [ defaultPrefilter ],\n\n\tprefilter: function( callback, prepend ) {\n\t\tif ( prepend ) {\n\t\t\tAnimation.prefilters.unshift( callback );\n\t\t} else {\n\t\t\tAnimation.prefilters.push( callback );\n\t\t}\n\t}\n} );\n\njQuery.speed = function( speed, easing, fn ) {\n\tvar opt = speed && typeof speed === \"object\" ? jQuery.extend( {}, speed ) : {\n\t\tcomplete: fn || !fn && easing ||\n\t\t\tisFunction( speed ) && speed,\n\t\tduration: speed,\n\t\teasing: fn && easing || easing && !isFunction( easing ) && easing\n\t};\n\n\t// Go to the end state if fx are off\n\tif ( jQuery.fx.off ) {\n\t\topt.duration = 0;\n\n\t} else {\n\t\tif ( typeof opt.duration !== \"number\" ) {\n\t\t\tif ( opt.duration in jQuery.fx.speeds ) {\n\t\t\t\topt.duration = jQuery.fx.speeds[ opt.duration ];\n\n\t\t\t} else {\n\t\t\t\topt.duration = jQuery.fx.speeds._default;\n\t\t\t}\n\t\t}\n\t}\n\n\t// Normalize opt.queue - true/undefined/null -> \"fx\"\n\tif ( opt.queue == null || opt.queue === true ) {\n\t\topt.queue = \"fx\";\n\t}\n\n\t// Queueing\n\topt.old = opt.complete;\n\n\topt.complete = function() {\n\t\tif ( isFunction( opt.old ) ) {\n\t\t\topt.old.call( this );\n\t\t}\n\n\t\tif ( opt.queue ) {\n\t\t\tjQuery.dequeue( this, opt.queue );\n\t\t}\n\t};\n\n\treturn opt;\n};\n\njQuery.fn.extend( {\n\tfadeTo: function( speed, to, easing, callback ) {\n\n\t\t// Show any hidden elements after setting opacity to 0\n\t\treturn this.filter( isHiddenWithinTree ).css( \"opacity\", 0 ).show()\n\n\t\t\t// Animate to the value specified\n\t\t\t.end().animate( { opacity: to }, speed, easing, callback );\n\t},\n\tanimate: function( prop, speed, easing, callback ) {\n\t\tvar empty = jQuery.isEmptyObject( prop ),\n\t\t\toptall = jQuery.speed( speed, easing, callback ),\n\t\t\tdoAnimation = function() {\n\n\t\t\t\t// Operate on a copy of prop so per-property easing won't be lost\n\t\t\t\tvar anim = Animation( this, jQuery.extend( {}, prop ), optall );\n\n\t\t\t\t// Empty animations, or finishing resolves immediately\n\t\t\t\tif ( empty || dataPriv.get( this, \"finish\" ) ) {\n\t\t\t\t\tanim.stop( true );\n\t\t\t\t}\n\t\t\t};\n\n\t\tdoAnimation.finish = doAnimation;\n\n\t\treturn empty || optall.queue === false ?\n\t\t\tthis.each( doAnimation ) :\n\t\t\tthis.queue( optall.queue, doAnimation );\n\t},\n\tstop: function( type, clearQueue, gotoEnd ) {\n\t\tvar stopQueue = function( hooks ) {\n\t\t\tvar stop = hooks.stop;\n\t\t\tdelete hooks.stop;\n\t\t\tstop( gotoEnd );\n\t\t};\n\n\t\tif ( typeof type !== \"string\" ) {\n\t\t\tgotoEnd = clearQueue;\n\t\t\tclearQueue = type;\n\t\t\ttype = undefined;\n\t\t}\n\t\tif ( clearQueue ) {\n\t\t\tthis.queue( type || \"fx\", [] );\n\t\t}\n\n\t\treturn this.each( function() {\n\t\t\tvar dequeue = true,\n\t\t\t\tindex = type != null && type + \"queueHooks\",\n\t\t\t\ttimers = jQuery.timers,\n\t\t\t\tdata = dataPriv.get( this );\n\n\t\t\tif ( index ) {\n\t\t\t\tif ( data[ index ] && data[ index ].stop ) {\n\t\t\t\t\tstopQueue( data[ index ] );\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tfor ( index in data ) {\n\t\t\t\t\tif ( data[ index ] && data[ index ].stop && rrun.test( index ) ) {\n\t\t\t\t\t\tstopQueue( data[ index ] );\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tfor ( index = timers.length; index--; ) {\n\t\t\t\tif ( timers[ index ].elem === this &&\n\t\t\t\t\t( type == null || timers[ index ].queue === type ) ) {\n\n\t\t\t\t\ttimers[ index ].anim.stop( gotoEnd );\n\t\t\t\t\tdequeue = false;\n\t\t\t\t\ttimers.splice( index, 1 );\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Start the next in the queue if the last step wasn't forced.\n\t\t\t// Timers currently will call their complete callbacks, which\n\t\t\t// will dequeue but only if they were gotoEnd.\n\t\t\tif ( dequeue || !gotoEnd ) {\n\t\t\t\tjQuery.dequeue( this, type );\n\t\t\t}\n\t\t} );\n\t},\n\tfinish: function( type ) {\n\t\tif ( type !== false ) {\n\t\t\ttype = type || \"fx\";\n\t\t}\n\t\treturn this.each( function() {\n\t\t\tvar index,\n\t\t\t\tdata = dataPriv.get( this ),\n\t\t\t\tqueue = data[ type + \"queue\" ],\n\t\t\t\thooks = data[ type + \"queueHooks\" ],\n\t\t\t\ttimers = jQuery.timers,\n\t\t\t\tlength = queue ? queue.length : 0;\n\n\t\t\t// Enable finishing flag on private data\n\t\t\tdata.finish = true;\n\n\t\t\t// Empty the queue first\n\t\t\tjQuery.queue( this, type, [] );\n\n\t\t\tif ( hooks && hooks.stop ) {\n\t\t\t\thooks.stop.call( this, true );\n\t\t\t}\n\n\t\t\t// Look for any active animations, and finish them\n\t\t\tfor ( index = timers.length; index--; ) {\n\t\t\t\tif ( timers[ index ].elem === this && timers[ index ].queue === type ) {\n\t\t\t\t\ttimers[ index ].anim.stop( true );\n\t\t\t\t\ttimers.splice( index, 1 );\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Look for any animations in the old queue and finish them\n\t\t\tfor ( index = 0; index < length; index++ ) {\n\t\t\t\tif ( queue[ index ] && queue[ index ].finish ) {\n\t\t\t\t\tqueue[ index ].finish.call( this );\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Turn off finishing flag\n\t\t\tdelete data.finish;\n\t\t} );\n\t}\n} );\n\njQuery.each( [ \"toggle\", \"show\", \"hide\" ], function( _i, name ) {\n\tvar cssFn = jQuery.fn[ name ];\n\tjQuery.fn[ name ] = function( speed, easing, callback ) {\n\t\treturn speed == null || typeof speed === \"boolean\" ?\n\t\t\tcssFn.apply( this, arguments ) :\n\t\t\tthis.animate( genFx( name, true ), speed, easing, callback );\n\t};\n} );\n\n// Generate shortcuts for custom animations\njQuery.each( {\n\tslideDown: genFx( \"show\" ),\n\tslideUp: genFx( \"hide\" ),\n\tslideToggle: genFx( \"toggle\" ),\n\tfadeIn: { opacity: \"show\" },\n\tfadeOut: { opacity: \"hide\" },\n\tfadeToggle: { opacity: \"toggle\" }\n}, function( name, props ) {\n\tjQuery.fn[ name ] = function( speed, easing, callback ) {\n\t\treturn this.animate( props, speed, easing, callback );\n\t};\n} );\n\njQuery.timers = [];\njQuery.fx.tick = function() {\n\tvar timer,\n\t\ti = 0,\n\t\ttimers = jQuery.timers;\n\n\tfxNow = Date.now();\n\n\tfor ( ; i < timers.length; i++ ) {\n\t\ttimer = timers[ i ];\n\n\t\t// Run the timer and safely remove it when done (allowing for external removal)\n\t\tif ( !timer() && timers[ i ] === timer ) {\n\t\t\ttimers.splice( i--, 1 );\n\t\t}\n\t}\n\n\tif ( !timers.length ) {\n\t\tjQuery.fx.stop();\n\t}\n\tfxNow = undefined;\n};\n\njQuery.fx.timer = function( timer ) {\n\tjQuery.timers.push( timer );\n\tjQuery.fx.start();\n};\n\njQuery.fx.interval = 13;\njQuery.fx.start = function() {\n\tif ( inProgress ) {\n\t\treturn;\n\t}\n\n\tinProgress = true;\n\tschedule();\n};\n\njQuery.fx.stop = function() {\n\tinProgress = null;\n};\n\njQuery.fx.speeds = {\n\tslow: 600,\n\tfast: 200,\n\n\t// Default speed\n\t_default: 400\n};\n\n\n// Based off of the plugin by Clint Helfers, with permission.\n// https://web.archive.org/web/20100324014747/http://blindsignals.com/index.php/2009/07/jquery-delay/\njQuery.fn.delay = function( time, type ) {\n\ttime = jQuery.fx ? jQuery.fx.speeds[ time ] || time : time;\n\ttype = type || \"fx\";\n\n\treturn this.queue( type, function( next, hooks ) {\n\t\tvar timeout = window.setTimeout( next, time );\n\t\thooks.stop = function() {\n\t\t\twindow.clearTimeout( timeout );\n\t\t};\n\t} );\n};\n\n\n( function() {\n\tvar input = document.createElement( \"input\" ),\n\t\tselect = document.createElement( \"select\" ),\n\t\topt = select.appendChild( document.createElement( \"option\" ) );\n\n\tinput.type = \"checkbox\";\n\n\t// Support: Android <=4.3 only\n\t// Default value for a checkbox should be \"on\"\n\tsupport.checkOn = input.value !== \"\";\n\n\t// Support: IE <=11 only\n\t// Must access selectedIndex to make default options select\n\tsupport.optSelected = opt.selected;\n\n\t// Support: IE <=11 only\n\t// An input loses its value after becoming a radio\n\tinput = document.createElement( \"input\" );\n\tinput.value = \"t\";\n\tinput.type = \"radio\";\n\tsupport.radioValue = input.value === \"t\";\n} )();\n\n\nvar boolHook,\n\tattrHandle = jQuery.expr.attrHandle;\n\njQuery.fn.extend( {\n\tattr: function( name, value ) {\n\t\treturn access( this, jQuery.attr, name, value, arguments.length > 1 );\n\t},\n\n\tremoveAttr: function( name ) {\n\t\treturn this.each( function() {\n\t\t\tjQuery.removeAttr( this, name );\n\t\t} );\n\t}\n} );\n\njQuery.extend( {\n\tattr: function( elem, name, value ) {\n\t\tvar ret, hooks,\n\t\t\tnType = elem.nodeType;\n\n\t\t// Don't get/set attributes on text, comment and attribute nodes\n\t\tif ( nType === 3 || nType === 8 || nType === 2 ) {\n\t\t\treturn;\n\t\t}\n\n\t\t// Fallback to prop when attributes are not supported\n\t\tif ( typeof elem.getAttribute === \"undefined\" ) {\n\t\t\treturn jQuery.prop( elem, name, value );\n\t\t}\n\n\t\t// Attribute hooks are determined by the lowercase version\n\t\t// Grab necessary hook if one is defined\n\t\tif ( nType !== 1 || !jQuery.isXMLDoc( elem ) ) {\n\t\t\thooks = jQuery.attrHooks[ name.toLowerCase() ] ||\n\t\t\t\t( jQuery.expr.match.bool.test( name ) ? boolHook : undefined );\n\t\t}\n\n\t\tif ( value !== undefined ) {\n\t\t\tif ( value === null ) {\n\t\t\t\tjQuery.removeAttr( elem, name );\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tif ( hooks && \"set\" in hooks &&\n\t\t\t\t( ret = hooks.set( elem, value, name ) ) !== undefined ) {\n\t\t\t\treturn ret;\n\t\t\t}\n\n\t\t\telem.setAttribute( name, value + \"\" );\n\t\t\treturn value;\n\t\t}\n\n\t\tif ( hooks && \"get\" in hooks && ( ret = hooks.get( elem, name ) ) !== null ) {\n\t\t\treturn ret;\n\t\t}\n\n\t\tret = jQuery.find.attr( elem, name );\n\n\t\t// Non-existent attributes return null, we normalize to undefined\n\t\treturn ret == null ? undefined : ret;\n\t},\n\n\tattrHooks: {\n\t\ttype: {\n\t\t\tset: function( elem, value ) {\n\t\t\t\tif ( !support.radioValue && value === \"radio\" &&\n\t\t\t\t\tnodeName( elem, \"input\" ) ) {\n\t\t\t\t\tvar val = elem.value;\n\t\t\t\t\telem.setAttribute( \"type\", value );\n\t\t\t\t\tif ( val ) {\n\t\t\t\t\t\telem.value = val;\n\t\t\t\t\t}\n\t\t\t\t\treturn value;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t},\n\n\tremoveAttr: function( elem, value ) {\n\t\tvar name,\n\t\t\ti = 0,\n\n\t\t\t// Attribute names can contain non-HTML whitespace characters\n\t\t\t// https://html.spec.whatwg.org/multipage/syntax.html#attributes-2\n\t\t\tattrNames = value && value.match( rnothtmlwhite );\n\n\t\tif ( attrNames && elem.nodeType === 1 ) {\n\t\t\twhile ( ( name = attrNames[ i++ ] ) ) {\n\t\t\t\telem.removeAttribute( name );\n\t\t\t}\n\t\t}\n\t}\n} );\n\n// Hooks for boolean attributes\nboolHook = {\n\tset: function( elem, value, name ) {\n\t\tif ( value === false ) {\n\n\t\t\t// Remove boolean attributes when set to false\n\t\t\tjQuery.removeAttr( elem, name );\n\t\t} else {\n\t\t\telem.setAttribute( name, name );\n\t\t}\n\t\treturn name;\n\t}\n};\n\njQuery.each( jQuery.expr.match.bool.source.match( /\\w+/g ), function( _i, name ) {\n\tvar getter = attrHandle[ name ] || jQuery.find.attr;\n\n\tattrHandle[ name ] = function( elem, name, isXML ) {\n\t\tvar ret, handle,\n\t\t\tlowercaseName = name.toLowerCase();\n\n\t\tif ( !isXML ) {\n\n\t\t\t// Avoid an infinite loop by temporarily removing this function from the getter\n\t\t\thandle = attrHandle[ lowercaseName ];\n\t\t\tattrHandle[ lowercaseName ] = ret;\n\t\t\tret = getter( elem, name, isXML ) != null ?\n\t\t\t\tlowercaseName :\n\t\t\t\tnull;\n\t\t\tattrHandle[ lowercaseName ] = handle;\n\t\t}\n\t\treturn ret;\n\t};\n} );\n\n\n\n\nvar rfocusable = /^(?:input|select|textarea|button)$/i,\n\trclickable = /^(?:a|area)$/i;\n\njQuery.fn.extend( {\n\tprop: function( name, value ) {\n\t\treturn access( this, jQuery.prop, name, value, arguments.length > 1 );\n\t},\n\n\tremoveProp: function( name ) {\n\t\treturn this.each( function() {\n\t\t\tdelete this[ jQuery.propFix[ name ] || name ];\n\t\t} );\n\t}\n} );\n\njQuery.extend( {\n\tprop: function( elem, name, value ) {\n\t\tvar ret, hooks,\n\t\t\tnType = elem.nodeType;\n\n\t\t// Don't get/set properties on text, comment and attribute nodes\n\t\tif ( nType === 3 || nType === 8 || nType === 2 ) {\n\t\t\treturn;\n\t\t}\n\n\t\tif ( nType !== 1 || !jQuery.isXMLDoc( elem ) ) {\n\n\t\t\t// Fix name and attach hooks\n\t\t\tname = jQuery.propFix[ name ] || name;\n\t\t\thooks = jQuery.propHooks[ name ];\n\t\t}\n\n\t\tif ( value !== undefined ) {\n\t\t\tif ( hooks && \"set\" in hooks &&\n\t\t\t\t( ret = hooks.set( elem, value, name ) ) !== undefined ) {\n\t\t\t\treturn ret;\n\t\t\t}\n\n\t\t\treturn ( elem[ name ] = value );\n\t\t}\n\n\t\tif ( hooks && \"get\" in hooks && ( ret = hooks.get( elem, name ) ) !== null ) {\n\t\t\treturn ret;\n\t\t}\n\n\t\treturn elem[ name ];\n\t},\n\n\tpropHooks: {\n\t\ttabIndex: {\n\t\t\tget: function( elem ) {\n\n\t\t\t\t// Support: IE <=9 - 11 only\n\t\t\t\t// elem.tabIndex doesn't always return the\n\t\t\t\t// correct value when it hasn't been explicitly set\n\t\t\t\t// https://web.archive.org/web/20141116233347/http://fluidproject.org/blog/2008/01/09/getting-setting-and-removing-tabindex-values-with-javascript/\n\t\t\t\t// Use proper attribute retrieval(#12072)\n\t\t\t\tvar tabindex = jQuery.find.attr( elem, \"tabindex\" );\n\n\t\t\t\tif ( tabindex ) {\n\t\t\t\t\treturn parseInt( tabindex, 10 );\n\t\t\t\t}\n\n\t\t\t\tif (\n\t\t\t\t\trfocusable.test( elem.nodeName ) ||\n\t\t\t\t\trclickable.test( elem.nodeName ) &&\n\t\t\t\t\telem.href\n\t\t\t\t) {\n\t\t\t\t\treturn 0;\n\t\t\t\t}\n\n\t\t\t\treturn -1;\n\t\t\t}\n\t\t}\n\t},\n\n\tpropFix: {\n\t\t\"for\": \"htmlFor\",\n\t\t\"class\": \"className\"\n\t}\n} );\n\n// Support: IE <=11 only\n// Accessing the selectedIndex property\n// forces the browser to respect setting selected\n// on the option\n// The getter ensures a default option is selected\n// when in an optgroup\n// eslint rule \"no-unused-expressions\" is disabled for this code\n// since it considers such accessions noop\nif ( !support.optSelected ) {\n\tjQuery.propHooks.selected = {\n\t\tget: function( elem ) {\n\n\t\t\t/* eslint no-unused-expressions: \"off\" */\n\n\t\t\tvar parent = elem.parentNode;\n\t\t\tif ( parent && parent.parentNode ) {\n\t\t\t\tparent.parentNode.selectedIndex;\n\t\t\t}\n\t\t\treturn null;\n\t\t},\n\t\tset: function( elem ) {\n\n\t\t\t/* eslint no-unused-expressions: \"off\" */\n\n\t\t\tvar parent = elem.parentNode;\n\t\t\tif ( parent ) {\n\t\t\t\tparent.selectedIndex;\n\n\t\t\t\tif ( parent.parentNode ) {\n\t\t\t\t\tparent.parentNode.selectedIndex;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t};\n}\n\njQuery.each( [\n\t\"tabIndex\",\n\t\"readOnly\",\n\t\"maxLength\",\n\t\"cellSpacing\",\n\t\"cellPadding\",\n\t\"rowSpan\",\n\t\"colSpan\",\n\t\"useMap\",\n\t\"frameBorder\",\n\t\"contentEditable\"\n], function() {\n\tjQuery.propFix[ this.toLowerCase() ] = this;\n} );\n\n\n\n\n\t// Strip and collapse whitespace according to HTML spec\n\t// https://infra.spec.whatwg.org/#strip-and-collapse-ascii-whitespace\n\tfunction stripAndCollapse( value ) {\n\t\tvar tokens = value.match( rnothtmlwhite ) || [];\n\t\treturn tokens.join( \" \" );\n\t}\n\n\nfunction getClass( elem ) {\n\treturn elem.getAttribute && elem.getAttribute( \"class\" ) || \"\";\n}\n\nfunction classesToArray( value ) {\n\tif ( Array.isArray( value ) ) {\n\t\treturn value;\n\t}\n\tif ( typeof value === \"string\" ) {\n\t\treturn value.match( rnothtmlwhite ) || [];\n\t}\n\treturn [];\n}\n\njQuery.fn.extend( {\n\taddClass: function( value ) {\n\t\tvar classes, elem, cur, curValue, clazz, j, finalValue,\n\t\t\ti = 0;\n\n\t\tif ( isFunction( value ) ) {\n\t\t\treturn this.each( function( j ) {\n\t\t\t\tjQuery( this ).addClass( value.call( this, j, getClass( this ) ) );\n\t\t\t} );\n\t\t}\n\n\t\tclasses = classesToArray( value );\n\n\t\tif ( classes.length ) {\n\t\t\twhile ( ( elem = this[ i++ ] ) ) {\n\t\t\t\tcurValue = getClass( elem );\n\t\t\t\tcur = elem.nodeType === 1 && ( \" \" + stripAndCollapse( curValue ) + \" \" );\n\n\t\t\t\tif ( cur ) {\n\t\t\t\t\tj = 0;\n\t\t\t\t\twhile ( ( clazz = classes[ j++ ] ) ) {\n\t\t\t\t\t\tif ( cur.indexOf( \" \" + clazz + \" \" ) < 0 ) {\n\t\t\t\t\t\t\tcur += clazz + \" \";\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\t// Only assign if different to avoid unneeded rendering.\n\t\t\t\t\tfinalValue = stripAndCollapse( cur );\n\t\t\t\t\tif ( curValue !== finalValue ) {\n\t\t\t\t\t\telem.setAttribute( \"class\", finalValue );\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\treturn this;\n\t},\n\n\tremoveClass: function( value ) {\n\t\tvar classes, elem, cur, curValue, clazz, j, finalValue,\n\t\t\ti = 0;\n\n\t\tif ( isFunction( value ) ) {\n\t\t\treturn this.each( function( j ) {\n\t\t\t\tjQuery( this ).removeClass( value.call( this, j, getClass( this ) ) );\n\t\t\t} );\n\t\t}\n\n\t\tif ( !arguments.length ) {\n\t\t\treturn this.attr( \"class\", \"\" );\n\t\t}\n\n\t\tclasses = classesToArray( value );\n\n\t\tif ( classes.length ) {\n\t\t\twhile ( ( elem = this[ i++ ] ) ) {\n\t\t\t\tcurValue = getClass( elem );\n\n\t\t\t\t// This expression is here for better compressibility (see addClass)\n\t\t\t\tcur = elem.nodeType === 1 && ( \" \" + stripAndCollapse( curValue ) + \" \" );\n\n\t\t\t\tif ( cur ) {\n\t\t\t\t\tj = 0;\n\t\t\t\t\twhile ( ( clazz = classes[ j++ ] ) ) {\n\n\t\t\t\t\t\t// Remove *all* instances\n\t\t\t\t\t\twhile ( cur.indexOf( \" \" + clazz + \" \" ) > -1 ) {\n\t\t\t\t\t\t\tcur = cur.replace( \" \" + clazz + \" \", \" \" );\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\t// Only assign if different to avoid unneeded rendering.\n\t\t\t\t\tfinalValue = stripAndCollapse( cur );\n\t\t\t\t\tif ( curValue !== finalValue ) {\n\t\t\t\t\t\telem.setAttribute( \"class\", finalValue );\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\treturn this;\n\t},\n\n\ttoggleClass: function( value, stateVal ) {\n\t\tvar type = typeof value,\n\t\t\tisValidValue = type === \"string\" || Array.isArray( value );\n\n\t\tif ( typeof stateVal === \"boolean\" && isValidValue ) {\n\t\t\treturn stateVal ? this.addClass( value ) : this.removeClass( value );\n\t\t}\n\n\t\tif ( isFunction( value ) ) {\n\t\t\treturn this.each( function( i ) {\n\t\t\t\tjQuery( this ).toggleClass(\n\t\t\t\t\tvalue.call( this, i, getClass( this ), stateVal ),\n\t\t\t\t\tstateVal\n\t\t\t\t);\n\t\t\t} );\n\t\t}\n\n\t\treturn this.each( function() {\n\t\t\tvar className, i, self, classNames;\n\n\t\t\tif ( isValidValue ) {\n\n\t\t\t\t// Toggle individual class names\n\t\t\t\ti = 0;\n\t\t\t\tself = jQuery( this );\n\t\t\t\tclassNames = classesToArray( value );\n\n\t\t\t\twhile ( ( className = classNames[ i++ ] ) ) {\n\n\t\t\t\t\t// Check each className given, space separated list\n\t\t\t\t\tif ( self.hasClass( className ) ) {\n\t\t\t\t\t\tself.removeClass( className );\n\t\t\t\t\t} else {\n\t\t\t\t\t\tself.addClass( className );\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t// Toggle whole class name\n\t\t\t} else if ( value === undefined || type === \"boolean\" ) {\n\t\t\t\tclassName = getClass( this );\n\t\t\t\tif ( className ) {\n\n\t\t\t\t\t// Store className if set\n\t\t\t\t\tdataPriv.set( this, \"__className__\", className );\n\t\t\t\t}\n\n\t\t\t\t// If the element has a class name or if we're passed `false`,\n\t\t\t\t// then remove the whole classname (if there was one, the above saved it).\n\t\t\t\t// Otherwise bring back whatever was previously saved (if anything),\n\t\t\t\t// falling back to the empty string if nothing was stored.\n\t\t\t\tif ( this.setAttribute ) {\n\t\t\t\t\tthis.setAttribute( \"class\",\n\t\t\t\t\t\tclassName || value === false ?\n\t\t\t\t\t\t\t\"\" :\n\t\t\t\t\t\t\tdataPriv.get( this, \"__className__\" ) || \"\"\n\t\t\t\t\t);\n\t\t\t\t}\n\t\t\t}\n\t\t} );\n\t},\n\n\thasClass: function( selector ) {\n\t\tvar className, elem,\n\t\t\ti = 0;\n\n\t\tclassName = \" \" + selector + \" \";\n\t\twhile ( ( elem = this[ i++ ] ) ) {\n\t\t\tif ( elem.nodeType === 1 &&\n\t\t\t\t( \" \" + stripAndCollapse( getClass( elem ) ) + \" \" ).indexOf( className ) > -1 ) {\n\t\t\t\treturn true;\n\t\t\t}\n\t\t}\n\n\t\treturn false;\n\t}\n} );\n\n\n\n\nvar rreturn = /\\r/g;\n\njQuery.fn.extend( {\n\tval: function( value ) {\n\t\tvar hooks, ret, valueIsFunction,\n\t\t\telem = this[ 0 ];\n\n\t\tif ( !arguments.length ) {\n\t\t\tif ( elem ) {\n\t\t\t\thooks = jQuery.valHooks[ elem.type ] ||\n\t\t\t\t\tjQuery.valHooks[ elem.nodeName.toLowerCase() ];\n\n\t\t\t\tif ( hooks &&\n\t\t\t\t\t\"get\" in hooks &&\n\t\t\t\t\t( ret = hooks.get( elem, \"value\" ) ) !== undefined\n\t\t\t\t) {\n\t\t\t\t\treturn ret;\n\t\t\t\t}\n\n\t\t\t\tret = elem.value;\n\n\t\t\t\t// Handle most common string cases\n\t\t\t\tif ( typeof ret === \"string\" ) {\n\t\t\t\t\treturn ret.replace( rreturn, \"\" );\n\t\t\t\t}\n\n\t\t\t\t// Handle cases where value is null/undef or number\n\t\t\t\treturn ret == null ? \"\" : ret;\n\t\t\t}\n\n\t\t\treturn;\n\t\t}\n\n\t\tvalueIsFunction = isFunction( value );\n\n\t\treturn this.each( function( i ) {\n\t\t\tvar val;\n\n\t\t\tif ( this.nodeType !== 1 ) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tif ( valueIsFunction ) {\n\t\t\t\tval = value.call( this, i, jQuery( this ).val() );\n\t\t\t} else {\n\t\t\t\tval = value;\n\t\t\t}\n\n\t\t\t// Treat null/undefined as \"\"; convert numbers to string\n\t\t\tif ( val == null ) {\n\t\t\t\tval = \"\";\n\n\t\t\t} else if ( typeof val === \"number\" ) {\n\t\t\t\tval += \"\";\n\n\t\t\t} else if ( Array.isArray( val ) ) {\n\t\t\t\tval = jQuery.map( val, function( value ) {\n\t\t\t\t\treturn value == null ? \"\" : value + \"\";\n\t\t\t\t} );\n\t\t\t}\n\n\t\t\thooks = jQuery.valHooks[ this.type ] || jQuery.valHooks[ this.nodeName.toLowerCase() ];\n\n\t\t\t// If set returns undefined, fall back to normal setting\n\t\t\tif ( !hooks || !( \"set\" in hooks ) || hooks.set( this, val, \"value\" ) === undefined ) {\n\t\t\t\tthis.value = val;\n\t\t\t}\n\t\t} );\n\t}\n} );\n\njQuery.extend( {\n\tvalHooks: {\n\t\toption: {\n\t\t\tget: function( elem ) {\n\n\t\t\t\tvar val = jQuery.find.attr( elem, \"value\" );\n\t\t\t\treturn val != null ?\n\t\t\t\t\tval :\n\n\t\t\t\t\t// Support: IE <=10 - 11 only\n\t\t\t\t\t// option.text throws exceptions (#14686, #14858)\n\t\t\t\t\t// Strip and collapse whitespace\n\t\t\t\t\t// https://html.spec.whatwg.org/#strip-and-collapse-whitespace\n\t\t\t\t\tstripAndCollapse( jQuery.text( elem ) );\n\t\t\t}\n\t\t},\n\t\tselect: {\n\t\t\tget: function( elem ) {\n\t\t\t\tvar value, option, i,\n\t\t\t\t\toptions = elem.options,\n\t\t\t\t\tindex = elem.selectedIndex,\n\t\t\t\t\tone = elem.type === \"select-one\",\n\t\t\t\t\tvalues = one ? null : [],\n\t\t\t\t\tmax = one ? index + 1 : options.length;\n\n\t\t\t\tif ( index < 0 ) {\n\t\t\t\t\ti = max;\n\n\t\t\t\t} else {\n\t\t\t\t\ti = one ? index : 0;\n\t\t\t\t}\n\n\t\t\t\t// Loop through all the selected options\n\t\t\t\tfor ( ; i < max; i++ ) {\n\t\t\t\t\toption = options[ i ];\n\n\t\t\t\t\t// Support: IE <=9 only\n\t\t\t\t\t// IE8-9 doesn't update selected after form reset (#2551)\n\t\t\t\t\tif ( ( option.selected || i === index ) &&\n\n\t\t\t\t\t\t\t// Don't return options that are disabled or in a disabled optgroup\n\t\t\t\t\t\t\t!option.disabled &&\n\t\t\t\t\t\t\t( !option.parentNode.disabled ||\n\t\t\t\t\t\t\t\t!nodeName( option.parentNode, \"optgroup\" ) ) ) {\n\n\t\t\t\t\t\t// Get the specific value for the option\n\t\t\t\t\t\tvalue = jQuery( option ).val();\n\n\t\t\t\t\t\t// We don't need an array for one selects\n\t\t\t\t\t\tif ( one ) {\n\t\t\t\t\t\t\treturn value;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t// Multi-Selects return an array\n\t\t\t\t\t\tvalues.push( value );\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\treturn values;\n\t\t\t},\n\n\t\t\tset: function( elem, value ) {\n\t\t\t\tvar optionSet, option,\n\t\t\t\t\toptions = elem.options,\n\t\t\t\t\tvalues = jQuery.makeArray( value ),\n\t\t\t\t\ti = options.length;\n\n\t\t\t\twhile ( i-- ) {\n\t\t\t\t\toption = options[ i ];\n\n\t\t\t\t\t/* eslint-disable no-cond-assign */\n\n\t\t\t\t\tif ( option.selected =\n\t\t\t\t\t\tjQuery.inArray( jQuery.valHooks.option.get( option ), values ) > -1\n\t\t\t\t\t) {\n\t\t\t\t\t\toptionSet = true;\n\t\t\t\t\t}\n\n\t\t\t\t\t/* eslint-enable no-cond-assign */\n\t\t\t\t}\n\n\t\t\t\t// Force browsers to behave consistently when non-matching value is set\n\t\t\t\tif ( !optionSet ) {\n\t\t\t\t\telem.selectedIndex = -1;\n\t\t\t\t}\n\t\t\t\treturn values;\n\t\t\t}\n\t\t}\n\t}\n} );\n\n// Radios and checkboxes getter/setter\njQuery.each( [ \"radio\", \"checkbox\" ], function() {\n\tjQuery.valHooks[ this ] = {\n\t\tset: function( elem, value ) {\n\t\t\tif ( Array.isArray( value ) ) {\n\t\t\t\treturn ( elem.checked = jQuery.inArray( jQuery( elem ).val(), value ) > -1 );\n\t\t\t}\n\t\t}\n\t};\n\tif ( !support.checkOn ) {\n\t\tjQuery.valHooks[ this ].get = function( elem ) {\n\t\t\treturn elem.getAttribute( \"value\" ) === null ? \"on\" : elem.value;\n\t\t};\n\t}\n} );\n\n\n\n\n// Return jQuery for attributes-only inclusion\n\n\nsupport.focusin = \"onfocusin\" in window;\n\n\nvar rfocusMorph = /^(?:focusinfocus|focusoutblur)$/,\n\tstopPropagationCallback = function( e ) {\n\t\te.stopPropagation();\n\t};\n\njQuery.extend( jQuery.event, {\n\n\ttrigger: function( event, data, elem, onlyHandlers ) {\n\n\t\tvar i, cur, tmp, bubbleType, ontype, handle, special, lastElement,\n\t\t\teventPath = [ elem || document ],\n\t\t\ttype = hasOwn.call( event, \"type\" ) ? event.type : event,\n\t\t\tnamespaces = hasOwn.call( event, \"namespace\" ) ? event.namespace.split( \".\" ) : [];\n\n\t\tcur = lastElement = tmp = elem = elem || document;\n\n\t\t// Don't do events on text and comment nodes\n\t\tif ( elem.nodeType === 3 || elem.nodeType === 8 ) {\n\t\t\treturn;\n\t\t}\n\n\t\t// focus/blur morphs to focusin/out; ensure we're not firing them right now\n\t\tif ( rfocusMorph.test( type + jQuery.event.triggered ) ) {\n\t\t\treturn;\n\t\t}\n\n\t\tif ( type.indexOf( \".\" ) > -1 ) {\n\n\t\t\t// Namespaced trigger; create a regexp to match event type in handle()\n\t\t\tnamespaces = type.split( \".\" );\n\t\t\ttype = namespaces.shift();\n\t\t\tnamespaces.sort();\n\t\t}\n\t\tontype = type.indexOf( \":\" ) < 0 && \"on\" + type;\n\n\t\t// Caller can pass in a jQuery.Event object, Object, or just an event type string\n\t\tevent = event[ jQuery.expando ] ?\n\t\t\tevent :\n\t\t\tnew jQuery.Event( type, typeof event === \"object\" && event );\n\n\t\t// Trigger bitmask: & 1 for native handlers; & 2 for jQuery (always true)\n\t\tevent.isTrigger = onlyHandlers ? 2 : 3;\n\t\tevent.namespace = namespaces.join( \".\" );\n\t\tevent.rnamespace = event.namespace ?\n\t\t\tnew RegExp( \"(^|\\\\.)\" + namespaces.join( \"\\\\.(?:.*\\\\.|)\" ) + \"(\\\\.|$)\" ) :\n\t\t\tnull;\n\n\t\t// Clean up the event in case it is being reused\n\t\tevent.result = undefined;\n\t\tif ( !event.target ) {\n\t\t\tevent.target = elem;\n\t\t}\n\n\t\t// Clone any incoming data and prepend the event, creating the handler arg list\n\t\tdata = data == null ?\n\t\t\t[ event ] :\n\t\t\tjQuery.makeArray( data, [ event ] );\n\n\t\t// Allow special events to draw outside the lines\n\t\tspecial = jQuery.event.special[ type ] || {};\n\t\tif ( !onlyHandlers && special.trigger && special.trigger.apply( elem, data ) === false ) {\n\t\t\treturn;\n\t\t}\n\n\t\t// Determine event propagation path in advance, per W3C events spec (#9951)\n\t\t// Bubble up to document, then to window; watch for a global ownerDocument var (#9724)\n\t\tif ( !onlyHandlers && !special.noBubble && !isWindow( elem ) ) {\n\n\t\t\tbubbleType = special.delegateType || type;\n\t\t\tif ( !rfocusMorph.test( bubbleType + type ) ) {\n\t\t\t\tcur = cur.parentNode;\n\t\t\t}\n\t\t\tfor ( ; cur; cur = cur.parentNode ) {\n\t\t\t\teventPath.push( cur );\n\t\t\t\ttmp = cur;\n\t\t\t}\n\n\t\t\t// Only add window if we got to document (e.g., not plain obj or detached DOM)\n\t\t\tif ( tmp === ( elem.ownerDocument || document ) ) {\n\t\t\t\teventPath.push( tmp.defaultView || tmp.parentWindow || window );\n\t\t\t}\n\t\t}\n\n\t\t// Fire handlers on the event path\n\t\ti = 0;\n\t\twhile ( ( cur = eventPath[ i++ ] ) && !event.isPropagationStopped() ) {\n\t\t\tlastElement = cur;\n\t\t\tevent.type = i > 1 ?\n\t\t\t\tbubbleType :\n\t\t\t\tspecial.bindType || type;\n\n\t\t\t// jQuery handler\n\t\t\thandle = ( dataPriv.get( cur, \"events\" ) || Object.create( null ) )[ event.type ] &&\n\t\t\t\tdataPriv.get( cur, \"handle\" );\n\t\t\tif ( handle ) {\n\t\t\t\thandle.apply( cur, data );\n\t\t\t}\n\n\t\t\t// Native handler\n\t\t\thandle = ontype && cur[ ontype ];\n\t\t\tif ( handle && handle.apply && acceptData( cur ) ) {\n\t\t\t\tevent.result = handle.apply( cur, data );\n\t\t\t\tif ( event.result === false ) {\n\t\t\t\t\tevent.preventDefault();\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\tevent.type = type;\n\n\t\t// If nobody prevented the default action, do it now\n\t\tif ( !onlyHandlers && !event.isDefaultPrevented() ) {\n\n\t\t\tif ( ( !special._default ||\n\t\t\t\tspecial._default.apply( eventPath.pop(), data ) === false ) &&\n\t\t\t\tacceptData( elem ) ) {\n\n\t\t\t\t// Call a native DOM method on the target with the same name as the event.\n\t\t\t\t// Don't do default actions on window, that's where global variables be (#6170)\n\t\t\t\tif ( ontype && isFunction( elem[ type ] ) && !isWindow( elem ) ) {\n\n\t\t\t\t\t// Don't re-trigger an onFOO event when we call its FOO() method\n\t\t\t\t\ttmp = elem[ ontype ];\n\n\t\t\t\t\tif ( tmp ) {\n\t\t\t\t\t\telem[ ontype ] = null;\n\t\t\t\t\t}\n\n\t\t\t\t\t// Prevent re-triggering of the same event, since we already bubbled it above\n\t\t\t\t\tjQuery.event.triggered = type;\n\n\t\t\t\t\tif ( event.isPropagationStopped() ) {\n\t\t\t\t\t\tlastElement.addEventListener( type, stopPropagationCallback );\n\t\t\t\t\t}\n\n\t\t\t\t\telem[ type ]();\n\n\t\t\t\t\tif ( event.isPropagationStopped() ) {\n\t\t\t\t\t\tlastElement.removeEventListener( type, stopPropagationCallback );\n\t\t\t\t\t}\n\n\t\t\t\t\tjQuery.event.triggered = undefined;\n\n\t\t\t\t\tif ( tmp ) {\n\t\t\t\t\t\telem[ ontype ] = tmp;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\treturn event.result;\n\t},\n\n\t// Piggyback on a donor event to simulate a different one\n\t// Used only for `focus(in | out)` events\n\tsimulate: function( type, elem, event ) {\n\t\tvar e = jQuery.extend(\n\t\t\tnew jQuery.Event(),\n\t\t\tevent,\n\t\t\t{\n\t\t\t\ttype: type,\n\t\t\t\tisSimulated: true\n\t\t\t}\n\t\t);\n\n\t\tjQuery.event.trigger( e, null, elem );\n\t}\n\n} );\n\njQuery.fn.extend( {\n\n\ttrigger: function( type, data ) {\n\t\treturn this.each( function() {\n\t\t\tjQuery.event.trigger( type, data, this );\n\t\t} );\n\t},\n\ttriggerHandler: function( type, data ) {\n\t\tvar elem = this[ 0 ];\n\t\tif ( elem ) {\n\t\t\treturn jQuery.event.trigger( type, data, elem, true );\n\t\t}\n\t}\n} );\n\n\n// Support: Firefox <=44\n// Firefox doesn't have focus(in | out) events\n// Related ticket - https://bugzilla.mozilla.org/show_bug.cgi?id=687787\n//\n// Support: Chrome <=48 - 49, Safari <=9.0 - 9.1\n// focus(in | out) events fire after focus & blur events,\n// which is spec violation - http://www.w3.org/TR/DOM-Level-3-Events/#events-focusevent-event-order\n// Related ticket - https://bugs.chromium.org/p/chromium/issues/detail?id=449857\nif ( !support.focusin ) {\n\tjQuery.each( { focus: \"focusin\", blur: \"focusout\" }, function( orig, fix ) {\n\n\t\t// Attach a single capturing handler on the document while someone wants focusin/focusout\n\t\tvar handler = function( event ) {\n\t\t\tjQuery.event.simulate( fix, event.target, jQuery.event.fix( event ) );\n\t\t};\n\n\t\tjQuery.event.special[ fix ] = {\n\t\t\tsetup: function() {\n\n\t\t\t\t// Handle: regular nodes (via `this.ownerDocument`), window\n\t\t\t\t// (via `this.document`) & document (via `this`).\n\t\t\t\tvar doc = this.ownerDocument || this.document || this,\n\t\t\t\t\tattaches = dataPriv.access( doc, fix );\n\n\t\t\t\tif ( !attaches ) {\n\t\t\t\t\tdoc.addEventListener( orig, handler, true );\n\t\t\t\t}\n\t\t\t\tdataPriv.access( doc, fix, ( attaches || 0 ) + 1 );\n\t\t\t},\n\t\t\tteardown: function() {\n\t\t\t\tvar doc = this.ownerDocument || this.document || this,\n\t\t\t\t\tattaches = dataPriv.access( doc, fix ) - 1;\n\n\t\t\t\tif ( !attaches ) {\n\t\t\t\t\tdoc.removeEventListener( orig, handler, true );\n\t\t\t\t\tdataPriv.remove( doc, fix );\n\n\t\t\t\t} else {\n\t\t\t\t\tdataPriv.access( doc, fix, attaches );\n\t\t\t\t}\n\t\t\t}\n\t\t};\n\t} );\n}\nvar location = window.location;\n\nvar nonce = { guid: Date.now() };\n\nvar rquery = ( /\\?/ );\n\n\n\n// Cross-browser xml parsing\njQuery.parseXML = function( data ) {\n\tvar xml, parserErrorElem;\n\tif ( !data || typeof data !== \"string\" ) {\n\t\treturn null;\n\t}\n\n\t// Support: IE 9 - 11 only\n\t// IE throws on parseFromString with invalid input.\n\ttry {\n\t\txml = ( new window.DOMParser() ).parseFromString( data, \"text/xml\" );\n\t} catch ( e ) {}\n\n\tparserErrorElem = xml && xml.getElementsByTagName( \"parsererror\" )[ 0 ];\n\tif ( !xml || parserErrorElem ) {\n\t\tjQuery.error( \"Invalid XML: \" + (\n\t\t\tparserErrorElem ?\n\t\t\t\tjQuery.map( parserErrorElem.childNodes, function( el ) {\n\t\t\t\t\treturn el.textContent;\n\t\t\t\t} ).join( \"\\n\" ) :\n\t\t\t\tdata\n\t\t) );\n\t}\n\treturn xml;\n};\n\n\nvar\n\trbracket = /\\[\\]$/,\n\trCRLF = /\\r?\\n/g,\n\trsubmitterTypes = /^(?:submit|button|image|reset|file)$/i,\n\trsubmittable = /^(?:input|select|textarea|keygen)/i;\n\nfunction buildParams( prefix, obj, traditional, add ) {\n\tvar name;\n\n\tif ( Array.isArray( obj ) ) {\n\n\t\t// Serialize array item.\n\t\tjQuery.each( obj, function( i, v ) {\n\t\t\tif ( traditional || rbracket.test( prefix ) ) {\n\n\t\t\t\t// Treat each array item as a scalar.\n\t\t\t\tadd( prefix, v );\n\n\t\t\t} else {\n\n\t\t\t\t// Item is non-scalar (array or object), encode its numeric index.\n\t\t\t\tbuildParams(\n\t\t\t\t\tprefix + \"[\" + ( typeof v === \"object\" && v != null ? i : \"\" ) + \"]\",\n\t\t\t\t\tv,\n\t\t\t\t\ttraditional,\n\t\t\t\t\tadd\n\t\t\t\t);\n\t\t\t}\n\t\t} );\n\n\t} else if ( !traditional && toType( obj ) === \"object\" ) {\n\n\t\t// Serialize object item.\n\t\tfor ( name in obj ) {\n\t\t\tbuildParams( prefix + \"[\" + name + \"]\", obj[ name ], traditional, add );\n\t\t}\n\n\t} else {\n\n\t\t// Serialize scalar item.\n\t\tadd( prefix, obj );\n\t}\n}\n\n// Serialize an array of form elements or a set of\n// key/values into a query string\njQuery.param = function( a, traditional ) {\n\tvar prefix,\n\t\ts = [],\n\t\tadd = function( key, valueOrFunction ) {\n\n\t\t\t// If value is a function, invoke it and use its return value\n\t\t\tvar value = isFunction( valueOrFunction ) ?\n\t\t\t\tvalueOrFunction() :\n\t\t\t\tvalueOrFunction;\n\n\t\t\ts[ s.length ] = encodeURIComponent( key ) + \"=\" +\n\t\t\t\tencodeURIComponent( value == null ? \"\" : value );\n\t\t};\n\n\tif ( a == null ) {\n\t\treturn \"\";\n\t}\n\n\t// If an array was passed in, assume that it is an array of form elements.\n\tif ( Array.isArray( a ) || ( a.jquery && !jQuery.isPlainObject( a ) ) ) {\n\n\t\t// Serialize the form elements\n\t\tjQuery.each( a, function() {\n\t\t\tadd( this.name, this.value );\n\t\t} );\n\n\t} else {\n\n\t\t// If traditional, encode the \"old\" way (the way 1.3.2 or older\n\t\t// did it), otherwise encode params recursively.\n\t\tfor ( prefix in a ) {\n\t\t\tbuildParams( prefix, a[ prefix ], traditional, add );\n\t\t}\n\t}\n\n\t// Return the resulting serialization\n\treturn s.join( \"&\" );\n};\n\njQuery.fn.extend( {\n\tserialize: function() {\n\t\treturn jQuery.param( this.serializeArray() );\n\t},\n\tserializeArray: function() {\n\t\treturn this.map( function() {\n\n\t\t\t// Can add propHook for \"elements\" to filter or add form elements\n\t\t\tvar elements = jQuery.prop( this, \"elements\" );\n\t\t\treturn elements ? jQuery.makeArray( elements ) : this;\n\t\t} ).filter( function() {\n\t\t\tvar type = this.type;\n\n\t\t\t// Use .is( \":disabled\" ) so that fieldset[disabled] works\n\t\t\treturn this.name && !jQuery( this ).is( \":disabled\" ) &&\n\t\t\t\trsubmittable.test( this.nodeName ) && !rsubmitterTypes.test( type ) &&\n\t\t\t\t( this.checked || !rcheckableType.test( type ) );\n\t\t} ).map( function( _i, elem ) {\n\t\t\tvar val = jQuery( this ).val();\n\n\t\t\tif ( val == null ) {\n\t\t\t\treturn null;\n\t\t\t}\n\n\t\t\tif ( Array.isArray( val ) ) {\n\t\t\t\treturn jQuery.map( val, function( val ) {\n\t\t\t\t\treturn { name: elem.name, value: val.replace( rCRLF, \"\\r\\n\" ) };\n\t\t\t\t} );\n\t\t\t}\n\n\t\t\treturn { name: elem.name, value: val.replace( rCRLF, \"\\r\\n\" ) };\n\t\t} ).get();\n\t}\n} );\n\n\nvar\n\tr20 = /%20/g,\n\trhash = /#.*$/,\n\trantiCache = /([?&])_=[^&]*/,\n\trheaders = /^(.*?):[ \\t]*([^\\r\\n]*)$/mg,\n\n\t// #7653, #8125, #8152: local protocol detection\n\trlocalProtocol = /^(?:about|app|app-storage|.+-extension|file|res|widget):$/,\n\trnoContent = /^(?:GET|HEAD)$/,\n\trprotocol = /^\\/\\//,\n\n\t/* Prefilters\n\t * 1) They are useful to introduce custom dataTypes (see ajax/jsonp.js for an example)\n\t * 2) These are called:\n\t * - BEFORE asking for a transport\n\t * - AFTER param serialization (s.data is a string if s.processData is true)\n\t * 3) key is the dataType\n\t * 4) the catchall symbol \"*\" can be used\n\t * 5) execution will start with transport dataType and THEN continue down to \"*\" if needed\n\t */\n\tprefilters = {},\n\n\t/* Transports bindings\n\t * 1) key is the dataType\n\t * 2) the catchall symbol \"*\" can be used\n\t * 3) selection will start with transport dataType and THEN go to \"*\" if needed\n\t */\n\ttransports = {},\n\n\t// Avoid comment-prolog char sequence (#10098); must appease lint and evade compression\n\tallTypes = \"*/\".concat( \"*\" ),\n\n\t// Anchor tag for parsing the document origin\n\toriginAnchor = document.createElement( \"a\" );\n\noriginAnchor.href = location.href;\n\n// Base \"constructor\" for jQuery.ajaxPrefilter and jQuery.ajaxTransport\nfunction addToPrefiltersOrTransports( structure ) {\n\n\t// dataTypeExpression is optional and defaults to \"*\"\n\treturn function( dataTypeExpression, func ) {\n\n\t\tif ( typeof dataTypeExpression !== \"string\" ) {\n\t\t\tfunc = dataTypeExpression;\n\t\t\tdataTypeExpression = \"*\";\n\t\t}\n\n\t\tvar dataType,\n\t\t\ti = 0,\n\t\t\tdataTypes = dataTypeExpression.toLowerCase().match( rnothtmlwhite ) || [];\n\n\t\tif ( isFunction( func ) ) {\n\n\t\t\t// For each dataType in the dataTypeExpression\n\t\t\twhile ( ( dataType = dataTypes[ i++ ] ) ) {\n\n\t\t\t\t// Prepend if requested\n\t\t\t\tif ( dataType[ 0 ] === \"+\" ) {\n\t\t\t\t\tdataType = dataType.slice( 1 ) || \"*\";\n\t\t\t\t\t( structure[ dataType ] = structure[ dataType ] || [] ).unshift( func );\n\n\t\t\t\t// Otherwise append\n\t\t\t\t} else {\n\t\t\t\t\t( structure[ dataType ] = structure[ dataType ] || [] ).push( func );\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t};\n}\n\n// Base inspection function for prefilters and transports\nfunction inspectPrefiltersOrTransports( structure, options, originalOptions, jqXHR ) {\n\n\tvar inspected = {},\n\t\tseekingTransport = ( structure === transports );\n\n\tfunction inspect( dataType ) {\n\t\tvar selected;\n\t\tinspected[ dataType ] = true;\n\t\tjQuery.each( structure[ dataType ] || [], function( _, prefilterOrFactory ) {\n\t\t\tvar dataTypeOrTransport = prefilterOrFactory( options, originalOptions, jqXHR );\n\t\t\tif ( typeof dataTypeOrTransport === \"string\" &&\n\t\t\t\t!seekingTransport && !inspected[ dataTypeOrTransport ] ) {\n\n\t\t\t\toptions.dataTypes.unshift( dataTypeOrTransport );\n\t\t\t\tinspect( dataTypeOrTransport );\n\t\t\t\treturn false;\n\t\t\t} else if ( seekingTransport ) {\n\t\t\t\treturn !( selected = dataTypeOrTransport );\n\t\t\t}\n\t\t} );\n\t\treturn selected;\n\t}\n\n\treturn inspect( options.dataTypes[ 0 ] ) || !inspected[ \"*\" ] && inspect( \"*\" );\n}\n\n// A special extend for ajax options\n// that takes \"flat\" options (not to be deep extended)\n// Fixes #9887\nfunction ajaxExtend( target, src ) {\n\tvar key, deep,\n\t\tflatOptions = jQuery.ajaxSettings.flatOptions || {};\n\n\tfor ( key in src ) {\n\t\tif ( src[ key ] !== undefined ) {\n\t\t\t( flatOptions[ key ] ? target : ( deep || ( deep = {} ) ) )[ key ] = src[ key ];\n\t\t}\n\t}\n\tif ( deep ) {\n\t\tjQuery.extend( true, target, deep );\n\t}\n\n\treturn target;\n}\n\n/* Handles responses to an ajax request:\n * - finds the right dataType (mediates between content-type and expected dataType)\n * - returns the corresponding response\n */\nfunction ajaxHandleResponses( s, jqXHR, responses ) {\n\n\tvar ct, type, finalDataType, firstDataType,\n\t\tcontents = s.contents,\n\t\tdataTypes = s.dataTypes;\n\n\t// Remove auto dataType and get content-type in the process\n\twhile ( dataTypes[ 0 ] === \"*\" ) {\n\t\tdataTypes.shift();\n\t\tif ( ct === undefined ) {\n\t\t\tct = s.mimeType || jqXHR.getResponseHeader( \"Content-Type\" );\n\t\t}\n\t}\n\n\t// Check if we're dealing with a known content-type\n\tif ( ct ) {\n\t\tfor ( type in contents ) {\n\t\t\tif ( contents[ type ] && contents[ type ].test( ct ) ) {\n\t\t\t\tdataTypes.unshift( type );\n\t\t\t\tbreak;\n\t\t\t}\n\t\t}\n\t}\n\n\t// Check to see if we have a response for the expected dataType\n\tif ( dataTypes[ 0 ] in responses ) {\n\t\tfinalDataType = dataTypes[ 0 ];\n\t} else {\n\n\t\t// Try convertible dataTypes\n\t\tfor ( type in responses ) {\n\t\t\tif ( !dataTypes[ 0 ] || s.converters[ type + \" \" + dataTypes[ 0 ] ] ) {\n\t\t\t\tfinalDataType = type;\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\tif ( !firstDataType ) {\n\t\t\t\tfirstDataType = type;\n\t\t\t}\n\t\t}\n\n\t\t// Or just use first one\n\t\tfinalDataType = finalDataType || firstDataType;\n\t}\n\n\t// If we found a dataType\n\t// We add the dataType to the list if needed\n\t// and return the corresponding response\n\tif ( finalDataType ) {\n\t\tif ( finalDataType !== dataTypes[ 0 ] ) {\n\t\t\tdataTypes.unshift( finalDataType );\n\t\t}\n\t\treturn responses[ finalDataType ];\n\t}\n}\n\n/* Chain conversions given the request and the original response\n * Also sets the responseXXX fields on the jqXHR instance\n */\nfunction ajaxConvert( s, response, jqXHR, isSuccess ) {\n\tvar conv2, current, conv, tmp, prev,\n\t\tconverters = {},\n\n\t\t// Work with a copy of dataTypes in case we need to modify it for conversion\n\t\tdataTypes = s.dataTypes.slice();\n\n\t// Create converters map with lowercased keys\n\tif ( dataTypes[ 1 ] ) {\n\t\tfor ( conv in s.converters ) {\n\t\t\tconverters[ conv.toLowerCase() ] = s.converters[ conv ];\n\t\t}\n\t}\n\n\tcurrent = dataTypes.shift();\n\n\t// Convert to each sequential dataType\n\twhile ( current ) {\n\n\t\tif ( s.responseFields[ current ] ) {\n\t\t\tjqXHR[ s.responseFields[ current ] ] = response;\n\t\t}\n\n\t\t// Apply the dataFilter if provided\n\t\tif ( !prev && isSuccess && s.dataFilter ) {\n\t\t\tresponse = s.dataFilter( response, s.dataType );\n\t\t}\n\n\t\tprev = current;\n\t\tcurrent = dataTypes.shift();\n\n\t\tif ( current ) {\n\n\t\t\t// There's only work to do if current dataType is non-auto\n\t\t\tif ( current === \"*\" ) {\n\n\t\t\t\tcurrent = prev;\n\n\t\t\t// Convert response if prev dataType is non-auto and differs from current\n\t\t\t} else if ( prev !== \"*\" && prev !== current ) {\n\n\t\t\t\t// Seek a direct converter\n\t\t\t\tconv = converters[ prev + \" \" + current ] || converters[ \"* \" + current ];\n\n\t\t\t\t// If none found, seek a pair\n\t\t\t\tif ( !conv ) {\n\t\t\t\t\tfor ( conv2 in converters ) {\n\n\t\t\t\t\t\t// If conv2 outputs current\n\t\t\t\t\t\ttmp = conv2.split( \" \" );\n\t\t\t\t\t\tif ( tmp[ 1 ] === current ) {\n\n\t\t\t\t\t\t\t// If prev can be converted to accepted input\n\t\t\t\t\t\t\tconv = converters[ prev + \" \" + tmp[ 0 ] ] ||\n\t\t\t\t\t\t\t\tconverters[ \"* \" + tmp[ 0 ] ];\n\t\t\t\t\t\t\tif ( conv ) {\n\n\t\t\t\t\t\t\t\t// Condense equivalence converters\n\t\t\t\t\t\t\t\tif ( conv === true ) {\n\t\t\t\t\t\t\t\t\tconv = converters[ conv2 ];\n\n\t\t\t\t\t\t\t\t// Otherwise, insert the intermediate dataType\n\t\t\t\t\t\t\t\t} else if ( converters[ conv2 ] !== true ) {\n\t\t\t\t\t\t\t\t\tcurrent = tmp[ 0 ];\n\t\t\t\t\t\t\t\t\tdataTypes.unshift( tmp[ 1 ] );\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\t// Apply converter (if not an equivalence)\n\t\t\t\tif ( conv !== true ) {\n\n\t\t\t\t\t// Unless errors are allowed to bubble, catch and return them\n\t\t\t\t\tif ( conv && s.throws ) {\n\t\t\t\t\t\tresponse = conv( response );\n\t\t\t\t\t} else {\n\t\t\t\t\t\ttry {\n\t\t\t\t\t\t\tresponse = conv( response );\n\t\t\t\t\t\t} catch ( e ) {\n\t\t\t\t\t\t\treturn {\n\t\t\t\t\t\t\t\tstate: \"parsererror\",\n\t\t\t\t\t\t\t\terror: conv ? e : \"No conversion from \" + prev + \" to \" + current\n\t\t\t\t\t\t\t};\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\treturn { state: \"success\", data: response };\n}\n\njQuery.extend( {\n\n\t// Counter for holding the number of active queries\n\tactive: 0,\n\n\t// Last-Modified header cache for next request\n\tlastModified: {},\n\tetag: {},\n\n\tajaxSettings: {\n\t\turl: location.href,\n\t\ttype: \"GET\",\n\t\tisLocal: rlocalProtocol.test( location.protocol ),\n\t\tglobal: true,\n\t\tprocessData: true,\n\t\tasync: true,\n\t\tcontentType: \"application/x-www-form-urlencoded; charset=UTF-8\",\n\n\t\t/*\n\t\ttimeout: 0,\n\t\tdata: null,\n\t\tdataType: null,\n\t\tusername: null,\n\t\tpassword: null,\n\t\tcache: null,\n\t\tthrows: false,\n\t\ttraditional: false,\n\t\theaders: {},\n\t\t*/\n\n\t\taccepts: {\n\t\t\t\"*\": allTypes,\n\t\t\ttext: \"text/plain\",\n\t\t\thtml: \"text/html\",\n\t\t\txml: \"application/xml, text/xml\",\n\t\t\tjson: \"application/json, text/javascript\"\n\t\t},\n\n\t\tcontents: {\n\t\t\txml: /\\bxml\\b/,\n\t\t\thtml: /\\bhtml/,\n\t\t\tjson: /\\bjson\\b/\n\t\t},\n\n\t\tresponseFields: {\n\t\t\txml: \"responseXML\",\n\t\t\ttext: \"responseText\",\n\t\t\tjson: \"responseJSON\"\n\t\t},\n\n\t\t// Data converters\n\t\t// Keys separate source (or catchall \"*\") and destination types with a single space\n\t\tconverters: {\n\n\t\t\t// Convert anything to text\n\t\t\t\"* text\": String,\n\n\t\t\t// Text to html (true = no transformation)\n\t\t\t\"text html\": true,\n\n\t\t\t// Evaluate text as a json expression\n\t\t\t\"text json\": JSON.parse,\n\n\t\t\t// Parse text as xml\n\t\t\t\"text xml\": jQuery.parseXML\n\t\t},\n\n\t\t// For options that shouldn't be deep extended:\n\t\t// you can add your own custom options here if\n\t\t// and when you create one that shouldn't be\n\t\t// deep extended (see ajaxExtend)\n\t\tflatOptions: {\n\t\t\turl: true,\n\t\t\tcontext: true\n\t\t}\n\t},\n\n\t// Creates a full fledged settings object into target\n\t// with both ajaxSettings and settings fields.\n\t// If target is omitted, writes into ajaxSettings.\n\tajaxSetup: function( target, settings ) {\n\t\treturn settings ?\n\n\t\t\t// Building a settings object\n\t\t\tajaxExtend( ajaxExtend( target, jQuery.ajaxSettings ), settings ) :\n\n\t\t\t// Extending ajaxSettings\n\t\t\tajaxExtend( jQuery.ajaxSettings, target );\n\t},\n\n\tajaxPrefilter: addToPrefiltersOrTransports( prefilters ),\n\tajaxTransport: addToPrefiltersOrTransports( transports ),\n\n\t// Main method\n\tajax: function( url, options ) {\n\n\t\t// If url is an object, simulate pre-1.5 signature\n\t\tif ( typeof url === \"object\" ) {\n\t\t\toptions = url;\n\t\t\turl = undefined;\n\t\t}\n\n\t\t// Force options to be an object\n\t\toptions = options || {};\n\n\t\tvar transport,\n\n\t\t\t// URL without anti-cache param\n\t\t\tcacheURL,\n\n\t\t\t// Response headers\n\t\t\tresponseHeadersString,\n\t\t\tresponseHeaders,\n\n\t\t\t// timeout handle\n\t\t\ttimeoutTimer,\n\n\t\t\t// Url cleanup var\n\t\t\turlAnchor,\n\n\t\t\t// Request state (becomes false upon send and true upon completion)\n\t\t\tcompleted,\n\n\t\t\t// To know if global events are to be dispatched\n\t\t\tfireGlobals,\n\n\t\t\t// Loop variable\n\t\t\ti,\n\n\t\t\t// uncached part of the url\n\t\t\tuncached,\n\n\t\t\t// Create the final options object\n\t\t\ts = jQuery.ajaxSetup( {}, options ),\n\n\t\t\t// Callbacks context\n\t\t\tcallbackContext = s.context || s,\n\n\t\t\t// Context for global events is callbackContext if it is a DOM node or jQuery collection\n\t\t\tglobalEventContext = s.context &&\n\t\t\t\t( callbackContext.nodeType || callbackContext.jquery ) ?\n\t\t\t\tjQuery( callbackContext ) :\n\t\t\t\tjQuery.event,\n\n\t\t\t// Deferreds\n\t\t\tdeferred = jQuery.Deferred(),\n\t\t\tcompleteDeferred = jQuery.Callbacks( \"once memory\" ),\n\n\t\t\t// Status-dependent callbacks\n\t\t\tstatusCode = s.statusCode || {},\n\n\t\t\t// Headers (they are sent all at once)\n\t\t\trequestHeaders = {},\n\t\t\trequestHeadersNames = {},\n\n\t\t\t// Default abort message\n\t\t\tstrAbort = \"canceled\",\n\n\t\t\t// Fake xhr\n\t\t\tjqXHR = {\n\t\t\t\treadyState: 0,\n\n\t\t\t\t// Builds headers hashtable if needed\n\t\t\t\tgetResponseHeader: function( key ) {\n\t\t\t\t\tvar match;\n\t\t\t\t\tif ( completed ) {\n\t\t\t\t\t\tif ( !responseHeaders ) {\n\t\t\t\t\t\t\tresponseHeaders = {};\n\t\t\t\t\t\t\twhile ( ( match = rheaders.exec( responseHeadersString ) ) ) {\n\t\t\t\t\t\t\t\tresponseHeaders[ match[ 1 ].toLowerCase() + \" \" ] =\n\t\t\t\t\t\t\t\t\t( responseHeaders[ match[ 1 ].toLowerCase() + \" \" ] || [] )\n\t\t\t\t\t\t\t\t\t\t.concat( match[ 2 ] );\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t\tmatch = responseHeaders[ key.toLowerCase() + \" \" ];\n\t\t\t\t\t}\n\t\t\t\t\treturn match == null ? null : match.join( \", \" );\n\t\t\t\t},\n\n\t\t\t\t// Raw string\n\t\t\t\tgetAllResponseHeaders: function() {\n\t\t\t\t\treturn completed ? responseHeadersString : null;\n\t\t\t\t},\n\n\t\t\t\t// Caches the header\n\t\t\t\tsetRequestHeader: function( name, value ) {\n\t\t\t\t\tif ( completed == null ) {\n\t\t\t\t\t\tname = requestHeadersNames[ name.toLowerCase() ] =\n\t\t\t\t\t\t\trequestHeadersNames[ name.toLowerCase() ] || name;\n\t\t\t\t\t\trequestHeaders[ name ] = value;\n\t\t\t\t\t}\n\t\t\t\t\treturn this;\n\t\t\t\t},\n\n\t\t\t\t// Overrides response content-type header\n\t\t\t\toverrideMimeType: function( type ) {\n\t\t\t\t\tif ( completed == null ) {\n\t\t\t\t\t\ts.mimeType = type;\n\t\t\t\t\t}\n\t\t\t\t\treturn this;\n\t\t\t\t},\n\n\t\t\t\t// Status-dependent callbacks\n\t\t\t\tstatusCode: function( map ) {\n\t\t\t\t\tvar code;\n\t\t\t\t\tif ( map ) {\n\t\t\t\t\t\tif ( completed ) {\n\n\t\t\t\t\t\t\t// Execute the appropriate callbacks\n\t\t\t\t\t\t\tjqXHR.always( map[ jqXHR.status ] );\n\t\t\t\t\t\t} else {\n\n\t\t\t\t\t\t\t// Lazy-add the new callbacks in a way that preserves old ones\n\t\t\t\t\t\t\tfor ( code in map ) {\n\t\t\t\t\t\t\t\tstatusCode[ code ] = [ statusCode[ code ], map[ code ] ];\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\treturn this;\n\t\t\t\t},\n\n\t\t\t\t// Cancel the request\n\t\t\t\tabort: function( statusText ) {\n\t\t\t\t\tvar finalText = statusText || strAbort;\n\t\t\t\t\tif ( transport ) {\n\t\t\t\t\t\ttransport.abort( finalText );\n\t\t\t\t\t}\n\t\t\t\t\tdone( 0, finalText );\n\t\t\t\t\treturn this;\n\t\t\t\t}\n\t\t\t};\n\n\t\t// Attach deferreds\n\t\tdeferred.promise( jqXHR );\n\n\t\t// Add protocol if not provided (prefilters might expect it)\n\t\t// Handle falsy url in the settings object (#10093: consistency with old signature)\n\t\t// We also use the url parameter if available\n\t\ts.url = ( ( url || s.url || location.href ) + \"\" )\n\t\t\t.replace( rprotocol, location.protocol + \"//\" );\n\n\t\t// Alias method option to type as per ticket #12004\n\t\ts.type = options.method || options.type || s.method || s.type;\n\n\t\t// Extract dataTypes list\n\t\ts.dataTypes = ( s.dataType || \"*\" ).toLowerCase().match( rnothtmlwhite ) || [ \"\" ];\n\n\t\t// A cross-domain request is in order when the origin doesn't match the current origin.\n\t\tif ( s.crossDomain == null ) {\n\t\t\turlAnchor = document.createElement( \"a\" );\n\n\t\t\t// Support: IE <=8 - 11, Edge 12 - 15\n\t\t\t// IE throws exception on accessing the href property if url is malformed,\n\t\t\t// e.g. http://example.com:80x/\n\t\t\ttry {\n\t\t\t\turlAnchor.href = s.url;\n\n\t\t\t\t// Support: IE <=8 - 11 only\n\t\t\t\t// Anchor's host property isn't correctly set when s.url is relative\n\t\t\t\turlAnchor.href = urlAnchor.href;\n\t\t\t\ts.crossDomain = originAnchor.protocol + \"//\" + originAnchor.host !==\n\t\t\t\t\turlAnchor.protocol + \"//\" + urlAnchor.host;\n\t\t\t} catch ( e ) {\n\n\t\t\t\t// If there is an error parsing the URL, assume it is crossDomain,\n\t\t\t\t// it can be rejected by the transport if it is invalid\n\t\t\t\ts.crossDomain = true;\n\t\t\t}\n\t\t}\n\n\t\t// Convert data if not already a string\n\t\tif ( s.data && s.processData && typeof s.data !== \"string\" ) {\n\t\t\ts.data = jQuery.param( s.data, s.traditional );\n\t\t}\n\n\t\t// Apply prefilters\n\t\tinspectPrefiltersOrTransports( prefilters, s, options, jqXHR );\n\n\t\t// If request was aborted inside a prefilter, stop there\n\t\tif ( completed ) {\n\t\t\treturn jqXHR;\n\t\t}\n\n\t\t// We can fire global events as of now if asked to\n\t\t// Don't fire events if jQuery.event is undefined in an AMD-usage scenario (#15118)\n\t\tfireGlobals = jQuery.event && s.global;\n\n\t\t// Watch for a new set of requests\n\t\tif ( fireGlobals && jQuery.active++ === 0 ) {\n\t\t\tjQuery.event.trigger( \"ajaxStart\" );\n\t\t}\n\n\t\t// Uppercase the type\n\t\ts.type = s.type.toUpperCase();\n\n\t\t// Determine if request has content\n\t\ts.hasContent = !rnoContent.test( s.type );\n\n\t\t// Save the URL in case we're toying with the If-Modified-Since\n\t\t// and/or If-None-Match header later on\n\t\t// Remove hash to simplify url manipulation\n\t\tcacheURL = s.url.replace( rhash, \"\" );\n\n\t\t// More options handling for requests with no content\n\t\tif ( !s.hasContent ) {\n\n\t\t\t// Remember the hash so we can put it back\n\t\t\tuncached = s.url.slice( cacheURL.length );\n\n\t\t\t// If data is available and should be processed, append data to url\n\t\t\tif ( s.data && ( s.processData || typeof s.data === \"string\" ) ) {\n\t\t\t\tcacheURL += ( rquery.test( cacheURL ) ? \"&\" : \"?\" ) + s.data;\n\n\t\t\t\t// #9682: remove data so that it's not used in an eventual retry\n\t\t\t\tdelete s.data;\n\t\t\t}\n\n\t\t\t// Add or update anti-cache param if needed\n\t\t\tif ( s.cache === false ) {\n\t\t\t\tcacheURL = cacheURL.replace( rantiCache, \"$1\" );\n\t\t\t\tuncached = ( rquery.test( cacheURL ) ? \"&\" : \"?\" ) + \"_=\" + ( nonce.guid++ ) +\n\t\t\t\t\tuncached;\n\t\t\t}\n\n\t\t\t// Put hash and anti-cache on the URL that will be requested (gh-1732)\n\t\t\ts.url = cacheURL + uncached;\n\n\t\t// Change '%20' to '+' if this is encoded form body content (gh-2658)\n\t\t} else if ( s.data && s.processData &&\n\t\t\t( s.contentType || \"\" ).indexOf( \"application/x-www-form-urlencoded\" ) === 0 ) {\n\t\t\ts.data = s.data.replace( r20, \"+\" );\n\t\t}\n\n\t\t// Set the If-Modified-Since and/or If-None-Match header, if in ifModified mode.\n\t\tif ( s.ifModified ) {\n\t\t\tif ( jQuery.lastModified[ cacheURL ] ) {\n\t\t\t\tjqXHR.setRequestHeader( \"If-Modified-Since\", jQuery.lastModified[ cacheURL ] );\n\t\t\t}\n\t\t\tif ( jQuery.etag[ cacheURL ] ) {\n\t\t\t\tjqXHR.setRequestHeader( \"If-None-Match\", jQuery.etag[ cacheURL ] );\n\t\t\t}\n\t\t}\n\n\t\t// Set the correct header, if data is being sent\n\t\tif ( s.data && s.hasContent && s.contentType !== false || options.contentType ) {\n\t\t\tjqXHR.setRequestHeader( \"Content-Type\", s.contentType );\n\t\t}\n\n\t\t// Set the Accepts header for the server, depending on the dataType\n\t\tjqXHR.setRequestHeader(\n\t\t\t\"Accept\",\n\t\t\ts.dataTypes[ 0 ] && s.accepts[ s.dataTypes[ 0 ] ] ?\n\t\t\t\ts.accepts[ s.dataTypes[ 0 ] ] +\n\t\t\t\t\t( s.dataTypes[ 0 ] !== \"*\" ? \", \" + allTypes + \"; q=0.01\" : \"\" ) :\n\t\t\t\ts.accepts[ \"*\" ]\n\t\t);\n\n\t\t// Check for headers option\n\t\tfor ( i in s.headers ) {\n\t\t\tjqXHR.setRequestHeader( i, s.headers[ i ] );\n\t\t}\n\n\t\t// Allow custom headers/mimetypes and early abort\n\t\tif ( s.beforeSend &&\n\t\t\t( s.beforeSend.call( callbackContext, jqXHR, s ) === false || completed ) ) {\n\n\t\t\t// Abort if not done already and return\n\t\t\treturn jqXHR.abort();\n\t\t}\n\n\t\t// Aborting is no longer a cancellation\n\t\tstrAbort = \"abort\";\n\n\t\t// Install callbacks on deferreds\n\t\tcompleteDeferred.add( s.complete );\n\t\tjqXHR.done( s.success );\n\t\tjqXHR.fail( s.error );\n\n\t\t// Get transport\n\t\ttransport = inspectPrefiltersOrTransports( transports, s, options, jqXHR );\n\n\t\t// If no transport, we auto-abort\n\t\tif ( !transport ) {\n\t\t\tdone( -1, \"No Transport\" );\n\t\t} else {\n\t\t\tjqXHR.readyState = 1;\n\n\t\t\t// Send global event\n\t\t\tif ( fireGlobals ) {\n\t\t\t\tglobalEventContext.trigger( \"ajaxSend\", [ jqXHR, s ] );\n\t\t\t}\n\n\t\t\t// If request was aborted inside ajaxSend, stop there\n\t\t\tif ( completed ) {\n\t\t\t\treturn jqXHR;\n\t\t\t}\n\n\t\t\t// Timeout\n\t\t\tif ( s.async && s.timeout > 0 ) {\n\t\t\t\ttimeoutTimer = window.setTimeout( function() {\n\t\t\t\t\tjqXHR.abort( \"timeout\" );\n\t\t\t\t}, s.timeout );\n\t\t\t}\n\n\t\t\ttry {\n\t\t\t\tcompleted = false;\n\t\t\t\ttransport.send( requestHeaders, done );\n\t\t\t} catch ( e ) {\n\n\t\t\t\t// Rethrow post-completion exceptions\n\t\t\t\tif ( completed ) {\n\t\t\t\t\tthrow e;\n\t\t\t\t}\n\n\t\t\t\t// Propagate others as results\n\t\t\t\tdone( -1, e );\n\t\t\t}\n\t\t}\n\n\t\t// Callback for when everything is done\n\t\tfunction done( status, nativeStatusText, responses, headers ) {\n\t\t\tvar isSuccess, success, error, response, modified,\n\t\t\t\tstatusText = nativeStatusText;\n\n\t\t\t// Ignore repeat invocations\n\t\t\tif ( completed ) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tcompleted = true;\n\n\t\t\t// Clear timeout if it exists\n\t\t\tif ( timeoutTimer ) {\n\t\t\t\twindow.clearTimeout( timeoutTimer );\n\t\t\t}\n\n\t\t\t// Dereference transport for early garbage collection\n\t\t\t// (no matter how long the jqXHR object will be used)\n\t\t\ttransport = undefined;\n\n\t\t\t// Cache response headers\n\t\t\tresponseHeadersString = headers || \"\";\n\n\t\t\t// Set readyState\n\t\t\tjqXHR.readyState = status > 0 ? 4 : 0;\n\n\t\t\t// Determine if successful\n\t\t\tisSuccess = status >= 200 && status < 300 || status === 304;\n\n\t\t\t// Get response data\n\t\t\tif ( responses ) {\n\t\t\t\tresponse = ajaxHandleResponses( s, jqXHR, responses );\n\t\t\t}\n\n\t\t\t// Use a noop converter for missing script but not if jsonp\n\t\t\tif ( !isSuccess &&\n\t\t\t\tjQuery.inArray( \"script\", s.dataTypes ) > -1 &&\n\t\t\t\tjQuery.inArray( \"json\", s.dataTypes ) < 0 ) {\n\t\t\t\ts.converters[ \"text script\" ] = function() {};\n\t\t\t}\n\n\t\t\t// Convert no matter what (that way responseXXX fields are always set)\n\t\t\tresponse = ajaxConvert( s, response, jqXHR, isSuccess );\n\n\t\t\t// If successful, handle type chaining\n\t\t\tif ( isSuccess ) {\n\n\t\t\t\t// Set the If-Modified-Since and/or If-None-Match header, if in ifModified mode.\n\t\t\t\tif ( s.ifModified ) {\n\t\t\t\t\tmodified = jqXHR.getResponseHeader( \"Last-Modified\" );\n\t\t\t\t\tif ( modified ) {\n\t\t\t\t\t\tjQuery.lastModified[ cacheURL ] = modified;\n\t\t\t\t\t}\n\t\t\t\t\tmodified = jqXHR.getResponseHeader( \"etag\" );\n\t\t\t\t\tif ( modified ) {\n\t\t\t\t\t\tjQuery.etag[ cacheURL ] = modified;\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\t// if no content\n\t\t\t\tif ( status === 204 || s.type === \"HEAD\" ) {\n\t\t\t\t\tstatusText = \"nocontent\";\n\n\t\t\t\t// if not modified\n\t\t\t\t} else if ( status === 304 ) {\n\t\t\t\t\tstatusText = \"notmodified\";\n\n\t\t\t\t// If we have data, let's convert it\n\t\t\t\t} else {\n\t\t\t\t\tstatusText = response.state;\n\t\t\t\t\tsuccess = response.data;\n\t\t\t\t\terror = response.error;\n\t\t\t\t\tisSuccess = !error;\n\t\t\t\t}\n\t\t\t} else {\n\n\t\t\t\t// Extract error from statusText and normalize for non-aborts\n\t\t\t\terror = statusText;\n\t\t\t\tif ( status || !statusText ) {\n\t\t\t\t\tstatusText = \"error\";\n\t\t\t\t\tif ( status < 0 ) {\n\t\t\t\t\t\tstatus = 0;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Set data for the fake xhr object\n\t\t\tjqXHR.status = status;\n\t\t\tjqXHR.statusText = ( nativeStatusText || statusText ) + \"\";\n\n\t\t\t// Success/Error\n\t\t\tif ( isSuccess ) {\n\t\t\t\tdeferred.resolveWith( callbackContext, [ success, statusText, jqXHR ] );\n\t\t\t} else {\n\t\t\t\tdeferred.rejectWith( callbackContext, [ jqXHR, statusText, error ] );\n\t\t\t}\n\n\t\t\t// Status-dependent callbacks\n\t\t\tjqXHR.statusCode( statusCode );\n\t\t\tstatusCode = undefined;\n\n\t\t\tif ( fireGlobals ) {\n\t\t\t\tglobalEventContext.trigger( isSuccess ? \"ajaxSuccess\" : \"ajaxError\",\n\t\t\t\t\t[ jqXHR, s, isSuccess ? success : error ] );\n\t\t\t}\n\n\t\t\t// Complete\n\t\t\tcompleteDeferred.fireWith( callbackContext, [ jqXHR, statusText ] );\n\n\t\t\tif ( fireGlobals ) {\n\t\t\t\tglobalEventContext.trigger( \"ajaxComplete\", [ jqXHR, s ] );\n\n\t\t\t\t// Handle the global AJAX counter\n\t\t\t\tif ( !( --jQuery.active ) ) {\n\t\t\t\t\tjQuery.event.trigger( \"ajaxStop\" );\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\treturn jqXHR;\n\t},\n\n\tgetJSON: function( url, data, callback ) {\n\t\treturn jQuery.get( url, data, callback, \"json\" );\n\t},\n\n\tgetScript: function( url, callback ) {\n\t\treturn jQuery.get( url, undefined, callback, \"script\" );\n\t}\n} );\n\njQuery.each( [ \"get\", \"post\" ], function( _i, method ) {\n\tjQuery[ method ] = function( url, data, callback, type ) {\n\n\t\t// Shift arguments if data argument was omitted\n\t\tif ( isFunction( data ) ) {\n\t\t\ttype = type || callback;\n\t\t\tcallback = data;\n\t\t\tdata = undefined;\n\t\t}\n\n\t\t// The url can be an options object (which then must have .url)\n\t\treturn jQuery.ajax( jQuery.extend( {\n\t\t\turl: url,\n\t\t\ttype: method,\n\t\t\tdataType: type,\n\t\t\tdata: data,\n\t\t\tsuccess: callback\n\t\t}, jQuery.isPlainObject( url ) && url ) );\n\t};\n} );\n\njQuery.ajaxPrefilter( function( s ) {\n\tvar i;\n\tfor ( i in s.headers ) {\n\t\tif ( i.toLowerCase() === \"content-type\" ) {\n\t\t\ts.contentType = s.headers[ i ] || \"\";\n\t\t}\n\t}\n} );\n\n\njQuery._evalUrl = function( url, options, doc ) {\n\treturn jQuery.ajax( {\n\t\turl: url,\n\n\t\t// Make this explicit, since user can override this through ajaxSetup (#11264)\n\t\ttype: \"GET\",\n\t\tdataType: \"script\",\n\t\tcache: true,\n\t\tasync: false,\n\t\tglobal: false,\n\n\t\t// Only evaluate the response if it is successful (gh-4126)\n\t\t// dataFilter is not invoked for failure responses, so using it instead\n\t\t// of the default converter is kludgy but it works.\n\t\tconverters: {\n\t\t\t\"text script\": function() {}\n\t\t},\n\t\tdataFilter: function( response ) {\n\t\t\tjQuery.globalEval( response, options, doc );\n\t\t}\n\t} );\n};\n\n\njQuery.fn.extend( {\n\twrapAll: function( html ) {\n\t\tvar wrap;\n\n\t\tif ( this[ 0 ] ) {\n\t\t\tif ( isFunction( html ) ) {\n\t\t\t\thtml = html.call( this[ 0 ] );\n\t\t\t}\n\n\t\t\t// The elements to wrap the target around\n\t\t\twrap = jQuery( html, this[ 0 ].ownerDocument ).eq( 0 ).clone( true );\n\n\t\t\tif ( this[ 0 ].parentNode ) {\n\t\t\t\twrap.insertBefore( this[ 0 ] );\n\t\t\t}\n\n\t\t\twrap.map( function() {\n\t\t\t\tvar elem = this;\n\n\t\t\t\twhile ( elem.firstElementChild ) {\n\t\t\t\t\telem = elem.firstElementChild;\n\t\t\t\t}\n\n\t\t\t\treturn elem;\n\t\t\t} ).append( this );\n\t\t}\n\n\t\treturn this;\n\t},\n\n\twrapInner: function( html ) {\n\t\tif ( isFunction( html ) ) {\n\t\t\treturn this.each( function( i ) {\n\t\t\t\tjQuery( this ).wrapInner( html.call( this, i ) );\n\t\t\t} );\n\t\t}\n\n\t\treturn this.each( function() {\n\t\t\tvar self = jQuery( this ),\n\t\t\t\tcontents = self.contents();\n\n\t\t\tif ( contents.length ) {\n\t\t\t\tcontents.wrapAll( html );\n\n\t\t\t} else {\n\t\t\t\tself.append( html );\n\t\t\t}\n\t\t} );\n\t},\n\n\twrap: function( html ) {\n\t\tvar htmlIsFunction = isFunction( html );\n\n\t\treturn this.each( function( i ) {\n\t\t\tjQuery( this ).wrapAll( htmlIsFunction ? html.call( this, i ) : html );\n\t\t} );\n\t},\n\n\tunwrap: function( selector ) {\n\t\tthis.parent( selector ).not( \"body\" ).each( function() {\n\t\t\tjQuery( this ).replaceWith( this.childNodes );\n\t\t} );\n\t\treturn this;\n\t}\n} );\n\n\njQuery.expr.pseudos.hidden = function( elem ) {\n\treturn !jQuery.expr.pseudos.visible( elem );\n};\njQuery.expr.pseudos.visible = function( elem ) {\n\treturn !!( elem.offsetWidth || elem.offsetHeight || elem.getClientRects().length );\n};\n\n\n\n\njQuery.ajaxSettings.xhr = function() {\n\ttry {\n\t\treturn new window.XMLHttpRequest();\n\t} catch ( e ) {}\n};\n\nvar xhrSuccessStatus = {\n\n\t\t// File protocol always yields status code 0, assume 200\n\t\t0: 200,\n\n\t\t// Support: IE <=9 only\n\t\t// #1450: sometimes IE returns 1223 when it should be 204\n\t\t1223: 204\n\t},\n\txhrSupported = jQuery.ajaxSettings.xhr();\n\nsupport.cors = !!xhrSupported && ( \"withCredentials\" in xhrSupported );\nsupport.ajax = xhrSupported = !!xhrSupported;\n\njQuery.ajaxTransport( function( options ) {\n\tvar callback, errorCallback;\n\n\t// Cross domain only allowed if supported through XMLHttpRequest\n\tif ( support.cors || xhrSupported && !options.crossDomain ) {\n\t\treturn {\n\t\t\tsend: function( headers, complete ) {\n\t\t\t\tvar i,\n\t\t\t\t\txhr = options.xhr();\n\n\t\t\t\txhr.open(\n\t\t\t\t\toptions.type,\n\t\t\t\t\toptions.url,\n\t\t\t\t\toptions.async,\n\t\t\t\t\toptions.username,\n\t\t\t\t\toptions.password\n\t\t\t\t);\n\n\t\t\t\t// Apply custom fields if provided\n\t\t\t\tif ( options.xhrFields ) {\n\t\t\t\t\tfor ( i in options.xhrFields ) {\n\t\t\t\t\t\txhr[ i ] = options.xhrFields[ i ];\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\t// Override mime type if needed\n\t\t\t\tif ( options.mimeType && xhr.overrideMimeType ) {\n\t\t\t\t\txhr.overrideMimeType( options.mimeType );\n\t\t\t\t}\n\n\t\t\t\t// X-Requested-With header\n\t\t\t\t// For cross-domain requests, seeing as conditions for a preflight are\n\t\t\t\t// akin to a jigsaw puzzle, we simply never set it to be sure.\n\t\t\t\t// (it can always be set on a per-request basis or even using ajaxSetup)\n\t\t\t\t// For same-domain requests, won't change header if already provided.\n\t\t\t\tif ( !options.crossDomain && !headers[ \"X-Requested-With\" ] ) {\n\t\t\t\t\theaders[ \"X-Requested-With\" ] = \"XMLHttpRequest\";\n\t\t\t\t}\n\n\t\t\t\t// Set headers\n\t\t\t\tfor ( i in headers ) {\n\t\t\t\t\txhr.setRequestHeader( i, headers[ i ] );\n\t\t\t\t}\n\n\t\t\t\t// Callback\n\t\t\t\tcallback = function( type ) {\n\t\t\t\t\treturn function() {\n\t\t\t\t\t\tif ( callback ) {\n\t\t\t\t\t\t\tcallback = errorCallback = xhr.onload =\n\t\t\t\t\t\t\t\txhr.onerror = xhr.onabort = xhr.ontimeout =\n\t\t\t\t\t\t\t\t\txhr.onreadystatechange = null;\n\n\t\t\t\t\t\t\tif ( type === \"abort\" ) {\n\t\t\t\t\t\t\t\txhr.abort();\n\t\t\t\t\t\t\t} else if ( type === \"error\" ) {\n\n\t\t\t\t\t\t\t\t// Support: IE <=9 only\n\t\t\t\t\t\t\t\t// On a manual native abort, IE9 throws\n\t\t\t\t\t\t\t\t// errors on any property access that is not readyState\n\t\t\t\t\t\t\t\tif ( typeof xhr.status !== \"number\" ) {\n\t\t\t\t\t\t\t\t\tcomplete( 0, \"error\" );\n\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\tcomplete(\n\n\t\t\t\t\t\t\t\t\t\t// File: protocol always yields status 0; see #8605, #14207\n\t\t\t\t\t\t\t\t\t\txhr.status,\n\t\t\t\t\t\t\t\t\t\txhr.statusText\n\t\t\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\tcomplete(\n\t\t\t\t\t\t\t\t\txhrSuccessStatus[ xhr.status ] || xhr.status,\n\t\t\t\t\t\t\t\t\txhr.statusText,\n\n\t\t\t\t\t\t\t\t\t// Support: IE <=9 only\n\t\t\t\t\t\t\t\t\t// IE9 has no XHR2 but throws on binary (trac-11426)\n\t\t\t\t\t\t\t\t\t// For XHR2 non-text, let the caller handle it (gh-2498)\n\t\t\t\t\t\t\t\t\t( xhr.responseType || \"text\" ) !== \"text\" ||\n\t\t\t\t\t\t\t\t\ttypeof xhr.responseText !== \"string\" ?\n\t\t\t\t\t\t\t\t\t\t{ binary: xhr.response } :\n\t\t\t\t\t\t\t\t\t\t{ text: xhr.responseText },\n\t\t\t\t\t\t\t\t\txhr.getAllResponseHeaders()\n\t\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t};\n\t\t\t\t};\n\n\t\t\t\t// Listen to events\n\t\t\t\txhr.onload = callback();\n\t\t\t\terrorCallback = xhr.onerror = xhr.ontimeout = callback( \"error\" );\n\n\t\t\t\t// Support: IE 9 only\n\t\t\t\t// Use onreadystatechange to replace onabort\n\t\t\t\t// to handle uncaught aborts\n\t\t\t\tif ( xhr.onabort !== undefined ) {\n\t\t\t\t\txhr.onabort = errorCallback;\n\t\t\t\t} else {\n\t\t\t\t\txhr.onreadystatechange = function() {\n\n\t\t\t\t\t\t// Check readyState before timeout as it changes\n\t\t\t\t\t\tif ( xhr.readyState === 4 ) {\n\n\t\t\t\t\t\t\t// Allow onerror to be called first,\n\t\t\t\t\t\t\t// but that will not handle a native abort\n\t\t\t\t\t\t\t// Also, save errorCallback to a variable\n\t\t\t\t\t\t\t// as xhr.onerror cannot be accessed\n\t\t\t\t\t\t\twindow.setTimeout( function() {\n\t\t\t\t\t\t\t\tif ( callback ) {\n\t\t\t\t\t\t\t\t\terrorCallback();\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t} );\n\t\t\t\t\t\t}\n\t\t\t\t\t};\n\t\t\t\t}\n\n\t\t\t\t// Create the abort callback\n\t\t\t\tcallback = callback( \"abort\" );\n\n\t\t\t\ttry {\n\n\t\t\t\t\t// Do send the request (this may raise an exception)\n\t\t\t\t\txhr.send( options.hasContent && options.data || null );\n\t\t\t\t} catch ( e ) {\n\n\t\t\t\t\t// #14683: Only rethrow if this hasn't been notified as an error yet\n\t\t\t\t\tif ( callback ) {\n\t\t\t\t\t\tthrow e;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t},\n\n\t\t\tabort: function() {\n\t\t\t\tif ( callback ) {\n\t\t\t\t\tcallback();\n\t\t\t\t}\n\t\t\t}\n\t\t};\n\t}\n} );\n\n\n\n\n// Prevent auto-execution of scripts when no explicit dataType was provided (See gh-2432)\njQuery.ajaxPrefilter( function( s ) {\n\tif ( s.crossDomain ) {\n\t\ts.contents.script = false;\n\t}\n} );\n\n// Install script dataType\njQuery.ajaxSetup( {\n\taccepts: {\n\t\tscript: \"text/javascript, application/javascript, \" +\n\t\t\t\"application/ecmascript, application/x-ecmascript\"\n\t},\n\tcontents: {\n\t\tscript: /\\b(?:java|ecma)script\\b/\n\t},\n\tconverters: {\n\t\t\"text script\": function( text ) {\n\t\t\tjQuery.globalEval( text );\n\t\t\treturn text;\n\t\t}\n\t}\n} );\n\n// Handle cache's special case and crossDomain\njQuery.ajaxPrefilter( \"script\", function( s ) {\n\tif ( s.cache === undefined ) {\n\t\ts.cache = false;\n\t}\n\tif ( s.crossDomain ) {\n\t\ts.type = \"GET\";\n\t}\n} );\n\n// Bind script tag hack transport\njQuery.ajaxTransport( \"script\", function( s ) {\n\n\t// This transport only deals with cross domain or forced-by-attrs requests\n\tif ( s.crossDomain || s.scriptAttrs ) {\n\t\tvar script, callback;\n\t\treturn {\n\t\t\tsend: function( _, complete ) {\n\t\t\t\tscript = jQuery( \"\n if (val === '') return true;\n if (val === 'false') return false;\n if (val === 'true') return true;\n return val;\n }\n\n if (DOCUMENT && typeof DOCUMENT.querySelector === 'function') {\n var attrs = [['data-family-prefix', 'familyPrefix'], ['data-replacement-class', 'replacementClass'], ['data-auto-replace-svg', 'autoReplaceSvg'], ['data-auto-add-css', 'autoAddCss'], ['data-auto-a11y', 'autoA11y'], ['data-search-pseudo-elements', 'searchPseudoElements'], ['data-observe-mutations', 'observeMutations'], ['data-mutate-approach', 'mutateApproach'], ['data-keep-original-source', 'keepOriginalSource'], ['data-measure-performance', 'measurePerformance'], ['data-show-missing-icons', 'showMissingIcons']];\n attrs.forEach(function (_ref) {\n var _ref2 = _slicedToArray(_ref, 2),\n attr = _ref2[0],\n key = _ref2[1];\n\n var val = coerce(getAttrConfig(attr));\n\n if (val !== undefined && val !== null) {\n initial[key] = val;\n }\n });\n }\n\n var _default = {\n familyPrefix: DEFAULT_FAMILY_PREFIX,\n replacementClass: DEFAULT_REPLACEMENT_CLASS,\n autoReplaceSvg: true,\n autoAddCss: true,\n autoA11y: true,\n searchPseudoElements: false,\n observeMutations: true,\n mutateApproach: 'async',\n keepOriginalSource: true,\n measurePerformance: false,\n showMissingIcons: true\n };\n\n var _config = _objectSpread({}, _default, initial);\n\n if (!_config.autoReplaceSvg) _config.observeMutations = false;\n\n var config = _objectSpread({}, _config);\n\n WINDOW.FontAwesomeConfig = config;\n\n var w = WINDOW || {};\n if (!w[NAMESPACE_IDENTIFIER]) w[NAMESPACE_IDENTIFIER] = {};\n if (!w[NAMESPACE_IDENTIFIER].styles) w[NAMESPACE_IDENTIFIER].styles = {};\n if (!w[NAMESPACE_IDENTIFIER].hooks) w[NAMESPACE_IDENTIFIER].hooks = {};\n if (!w[NAMESPACE_IDENTIFIER].shims) w[NAMESPACE_IDENTIFIER].shims = [];\n var namespace = w[NAMESPACE_IDENTIFIER];\n\n var functions = [];\n\n var listener = function listener() {\n DOCUMENT.removeEventListener('DOMContentLoaded', listener);\n loaded = 1;\n functions.map(function (fn) {\n return fn();\n });\n };\n\n var loaded = false;\n\n if (IS_DOM) {\n loaded = (DOCUMENT.documentElement.doScroll ? /^loaded|^c/ : /^loaded|^i|^c/).test(DOCUMENT.readyState);\n if (!loaded) DOCUMENT.addEventListener('DOMContentLoaded', listener);\n }\n\n function domready (fn) {\n if (!IS_DOM) return;\n loaded ? setTimeout(fn, 0) : functions.push(fn);\n }\n\n var PENDING = 'pending';\n var SETTLED = 'settled';\n var FULFILLED = 'fulfilled';\n var REJECTED = 'rejected';\n\n var NOOP = function NOOP() {};\n\n var isNode = typeof global !== 'undefined' && typeof global.process !== 'undefined' && typeof global.process.emit === 'function';\n var asyncSetTimer = typeof setImmediate === 'undefined' ? setTimeout : setImmediate;\n var asyncQueue = [];\n var asyncTimer;\n\n function asyncFlush() {\n // run promise callbacks\n for (var i = 0; i < asyncQueue.length; i++) {\n asyncQueue[i][0](asyncQueue[i][1]);\n } // reset async asyncQueue\n\n\n asyncQueue = [];\n asyncTimer = false;\n }\n\n function asyncCall(callback, arg) {\n asyncQueue.push([callback, arg]);\n\n if (!asyncTimer) {\n asyncTimer = true;\n asyncSetTimer(asyncFlush, 0);\n }\n }\n\n function invokeResolver(resolver, promise) {\n function resolvePromise(value) {\n resolve(promise, value);\n }\n\n function rejectPromise(reason) {\n reject(promise, reason);\n }\n\n try {\n resolver(resolvePromise, rejectPromise);\n } catch (e) {\n rejectPromise(e);\n }\n }\n\n function invokeCallback(subscriber) {\n var owner = subscriber.owner;\n var settled = owner._state;\n var value = owner._data;\n var callback = subscriber[settled];\n var promise = subscriber.then;\n\n if (typeof callback === 'function') {\n settled = FULFILLED;\n\n try {\n value = callback(value);\n } catch (e) {\n reject(promise, e);\n }\n }\n\n if (!handleThenable(promise, value)) {\n if (settled === FULFILLED) {\n resolve(promise, value);\n }\n\n if (settled === REJECTED) {\n reject(promise, value);\n }\n }\n }\n\n function handleThenable(promise, value) {\n var resolved;\n\n try {\n if (promise === value) {\n throw new TypeError('A promises callback cannot return that same promise.');\n }\n\n if (value && (typeof value === 'function' || _typeof(value) === 'object')) {\n // then should be retrieved only once\n var then = value.then;\n\n if (typeof then === 'function') {\n then.call(value, function (val) {\n if (!resolved) {\n resolved = true;\n\n if (value === val) {\n fulfill(promise, val);\n } else {\n resolve(promise, val);\n }\n }\n }, function (reason) {\n if (!resolved) {\n resolved = true;\n reject(promise, reason);\n }\n });\n return true;\n }\n }\n } catch (e) {\n if (!resolved) {\n reject(promise, e);\n }\n\n return true;\n }\n\n return false;\n }\n\n function resolve(promise, value) {\n if (promise === value || !handleThenable(promise, value)) {\n fulfill(promise, value);\n }\n }\n\n function fulfill(promise, value) {\n if (promise._state === PENDING) {\n promise._state = SETTLED;\n promise._data = value;\n asyncCall(publishFulfillment, promise);\n }\n }\n\n function reject(promise, reason) {\n if (promise._state === PENDING) {\n promise._state = SETTLED;\n promise._data = reason;\n asyncCall(publishRejection, promise);\n }\n }\n\n function publish(promise) {\n promise._then = promise._then.forEach(invokeCallback);\n }\n\n function publishFulfillment(promise) {\n promise._state = FULFILLED;\n publish(promise);\n }\n\n function publishRejection(promise) {\n promise._state = REJECTED;\n publish(promise);\n\n if (!promise._handled && isNode) {\n global.process.emit('unhandledRejection', promise._data, promise);\n }\n }\n\n function notifyRejectionHandled(promise) {\n global.process.emit('rejectionHandled', promise);\n }\n /**\n * @class\n */\n\n\n function P(resolver) {\n if (typeof resolver !== 'function') {\n throw new TypeError('Promise resolver ' + resolver + ' is not a function');\n }\n\n if (this instanceof P === false) {\n throw new TypeError('Failed to construct \\'Promise\\': Please use the \\'new\\' operator, this object constructor cannot be called as a function.');\n }\n\n this._then = [];\n invokeResolver(resolver, this);\n }\n\n P.prototype = {\n constructor: P,\n _state: PENDING,\n _then: null,\n _data: undefined,\n _handled: false,\n then: function then(onFulfillment, onRejection) {\n var subscriber = {\n owner: this,\n then: new this.constructor(NOOP),\n fulfilled: onFulfillment,\n rejected: onRejection\n };\n\n if ((onRejection || onFulfillment) && !this._handled) {\n this._handled = true;\n\n if (this._state === REJECTED && isNode) {\n asyncCall(notifyRejectionHandled, this);\n }\n }\n\n if (this._state === FULFILLED || this._state === REJECTED) {\n // already resolved, call callback async\n asyncCall(invokeCallback, subscriber);\n } else {\n // subscribe\n this._then.push(subscriber);\n }\n\n return subscriber.then;\n },\n catch: function _catch(onRejection) {\n return this.then(null, onRejection);\n }\n };\n\n P.all = function (promises) {\n if (!Array.isArray(promises)) {\n throw new TypeError('You must pass an array to Promise.all().');\n }\n\n return new P(function (resolve, reject) {\n var results = [];\n var remaining = 0;\n\n function resolver(index) {\n remaining++;\n return function (value) {\n results[index] = value;\n\n if (! --remaining) {\n resolve(results);\n }\n };\n }\n\n for (var i = 0, promise; i < promises.length; i++) {\n promise = promises[i];\n\n if (promise && typeof promise.then === 'function') {\n promise.then(resolver(i), reject);\n } else {\n results[i] = promise;\n }\n }\n\n if (!remaining) {\n resolve(results);\n }\n });\n };\n\n P.race = function (promises) {\n if (!Array.isArray(promises)) {\n throw new TypeError('You must pass an array to Promise.race().');\n }\n\n return new P(function (resolve, reject) {\n for (var i = 0, promise; i < promises.length; i++) {\n promise = promises[i];\n\n if (promise && typeof promise.then === 'function') {\n promise.then(resolve, reject);\n } else {\n resolve(promise);\n }\n }\n });\n };\n\n P.resolve = function (value) {\n if (value && _typeof(value) === 'object' && value.constructor === P) {\n return value;\n }\n\n return new P(function (resolve) {\n resolve(value);\n });\n };\n\n P.reject = function (reason) {\n return new P(function (resolve, reject) {\n reject(reason);\n });\n };\n\n var picked = typeof Promise === 'function' ? Promise : P;\n\n var d = UNITS_IN_GRID;\n var meaninglessTransform = {\n size: 16,\n x: 0,\n y: 0,\n rotate: 0,\n flipX: false,\n flipY: false\n };\n\n function isReserved(name) {\n return ~RESERVED_CLASSES.indexOf(name);\n }\n\n function bunker(fn) {\n try {\n fn();\n } catch (e) {\n if (!PRODUCTION) {\n throw e;\n }\n }\n }\n function insertCss(css) {\n if (!css || !IS_DOM) {\n return;\n }\n\n var style = DOCUMENT.createElement('style');\n style.setAttribute('type', 'text/css');\n style.innerHTML = css;\n var headChildren = DOCUMENT.head.childNodes;\n var beforeChild = null;\n\n for (var i = headChildren.length - 1; i > -1; i--) {\n var child = headChildren[i];\n var tagName = (child.tagName || '').toUpperCase();\n\n if (['STYLE', 'LINK'].indexOf(tagName) > -1) {\n beforeChild = child;\n }\n }\n\n DOCUMENT.head.insertBefore(style, beforeChild);\n return css;\n }\n var idPool = '0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ';\n function nextUniqueId() {\n var size = 12;\n var id = '';\n\n while (size-- > 0) {\n id += idPool[Math.random() * 62 | 0];\n }\n\n return id;\n }\n function toArray(obj) {\n var array = [];\n\n for (var i = (obj || []).length >>> 0; i--;) {\n array[i] = obj[i];\n }\n\n return array;\n }\n function classArray(node) {\n if (node.classList) {\n return toArray(node.classList);\n } else {\n return (node.getAttribute('class') || '').split(' ').filter(function (i) {\n return i;\n });\n }\n }\n function getIconName(familyPrefix, cls) {\n var parts = cls.split('-');\n var prefix = parts[0];\n var iconName = parts.slice(1).join('-');\n\n if (prefix === familyPrefix && iconName !== '' && !isReserved(iconName)) {\n return iconName;\n } else {\n return null;\n }\n }\n function htmlEscape(str) {\n return \"\".concat(str).replace(/&/g, '&').replace(/\"/g, '"').replace(/'/g, ''').replace(//g, '>');\n }\n function joinAttributes(attributes) {\n return Object.keys(attributes || {}).reduce(function (acc, attributeName) {\n return acc + \"\".concat(attributeName, \"=\\\"\").concat(htmlEscape(attributes[attributeName]), \"\\\" \");\n }, '').trim();\n }\n function joinStyles(styles) {\n return Object.keys(styles || {}).reduce(function (acc, styleName) {\n return acc + \"\".concat(styleName, \": \").concat(styles[styleName], \";\");\n }, '');\n }\n function transformIsMeaningful(transform) {\n return transform.size !== meaninglessTransform.size || transform.x !== meaninglessTransform.x || transform.y !== meaninglessTransform.y || transform.rotate !== meaninglessTransform.rotate || transform.flipX || transform.flipY;\n }\n function transformForSvg(_ref) {\n var transform = _ref.transform,\n containerWidth = _ref.containerWidth,\n iconWidth = _ref.iconWidth;\n var outer = {\n transform: \"translate(\".concat(containerWidth / 2, \" 256)\")\n };\n var innerTranslate = \"translate(\".concat(transform.x * 32, \", \").concat(transform.y * 32, \") \");\n var innerScale = \"scale(\".concat(transform.size / 16 * (transform.flipX ? -1 : 1), \", \").concat(transform.size / 16 * (transform.flipY ? -1 : 1), \") \");\n var innerRotate = \"rotate(\".concat(transform.rotate, \" 0 0)\");\n var inner = {\n transform: \"\".concat(innerTranslate, \" \").concat(innerScale, \" \").concat(innerRotate)\n };\n var path = {\n transform: \"translate(\".concat(iconWidth / 2 * -1, \" -256)\")\n };\n return {\n outer: outer,\n inner: inner,\n path: path\n };\n }\n function transformForCss(_ref2) {\n var transform = _ref2.transform,\n _ref2$width = _ref2.width,\n width = _ref2$width === void 0 ? UNITS_IN_GRID : _ref2$width,\n _ref2$height = _ref2.height,\n height = _ref2$height === void 0 ? UNITS_IN_GRID : _ref2$height,\n _ref2$startCentered = _ref2.startCentered,\n startCentered = _ref2$startCentered === void 0 ? false : _ref2$startCentered;\n var val = '';\n\n if (startCentered && IS_IE) {\n val += \"translate(\".concat(transform.x / d - width / 2, \"em, \").concat(transform.y / d - height / 2, \"em) \");\n } else if (startCentered) {\n val += \"translate(calc(-50% + \".concat(transform.x / d, \"em), calc(-50% + \").concat(transform.y / d, \"em)) \");\n } else {\n val += \"translate(\".concat(transform.x / d, \"em, \").concat(transform.y / d, \"em) \");\n }\n\n val += \"scale(\".concat(transform.size / d * (transform.flipX ? -1 : 1), \", \").concat(transform.size / d * (transform.flipY ? -1 : 1), \") \");\n val += \"rotate(\".concat(transform.rotate, \"deg) \");\n return val;\n }\n\n var ALL_SPACE = {\n x: 0,\n y: 0,\n width: '100%',\n height: '100%'\n };\n\n function fillBlack(abstract) {\n var force = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : true;\n\n if (abstract.attributes && (abstract.attributes.fill || force)) {\n abstract.attributes.fill = 'black';\n }\n\n return abstract;\n }\n\n function deGroup(abstract) {\n if (abstract.tag === 'g') {\n return abstract.children;\n } else {\n return [abstract];\n }\n }\n\n function makeIconMasking (_ref) {\n var children = _ref.children,\n attributes = _ref.attributes,\n main = _ref.main,\n mask = _ref.mask,\n explicitMaskId = _ref.maskId,\n transform = _ref.transform;\n var mainWidth = main.width,\n mainPath = main.icon;\n var maskWidth = mask.width,\n maskPath = mask.icon;\n var trans = transformForSvg({\n transform: transform,\n containerWidth: maskWidth,\n iconWidth: mainWidth\n });\n var maskRect = {\n tag: 'rect',\n attributes: _objectSpread({}, ALL_SPACE, {\n fill: 'white'\n })\n };\n var maskInnerGroupChildrenMixin = mainPath.children ? {\n children: mainPath.children.map(fillBlack)\n } : {};\n var maskInnerGroup = {\n tag: 'g',\n attributes: _objectSpread({}, trans.inner),\n children: [fillBlack(_objectSpread({\n tag: mainPath.tag,\n attributes: _objectSpread({}, mainPath.attributes, trans.path)\n }, maskInnerGroupChildrenMixin))]\n };\n var maskOuterGroup = {\n tag: 'g',\n attributes: _objectSpread({}, trans.outer),\n children: [maskInnerGroup]\n };\n var maskId = \"mask-\".concat(explicitMaskId || nextUniqueId());\n var clipId = \"clip-\".concat(explicitMaskId || nextUniqueId());\n var maskTag = {\n tag: 'mask',\n attributes: _objectSpread({}, ALL_SPACE, {\n id: maskId,\n maskUnits: 'userSpaceOnUse',\n maskContentUnits: 'userSpaceOnUse'\n }),\n children: [maskRect, maskOuterGroup]\n };\n var defs = {\n tag: 'defs',\n children: [{\n tag: 'clipPath',\n attributes: {\n id: clipId\n },\n children: deGroup(maskPath)\n }, maskTag]\n };\n children.push(defs, {\n tag: 'rect',\n attributes: _objectSpread({\n fill: 'currentColor',\n 'clip-path': \"url(#\".concat(clipId, \")\"),\n mask: \"url(#\".concat(maskId, \")\")\n }, ALL_SPACE)\n });\n return {\n children: children,\n attributes: attributes\n };\n }\n\n function makeIconStandard (_ref) {\n var children = _ref.children,\n attributes = _ref.attributes,\n main = _ref.main,\n transform = _ref.transform,\n styles = _ref.styles;\n var styleString = joinStyles(styles);\n\n if (styleString.length > 0) {\n attributes['style'] = styleString;\n }\n\n if (transformIsMeaningful(transform)) {\n var trans = transformForSvg({\n transform: transform,\n containerWidth: main.width,\n iconWidth: main.width\n });\n children.push({\n tag: 'g',\n attributes: _objectSpread({}, trans.outer),\n children: [{\n tag: 'g',\n attributes: _objectSpread({}, trans.inner),\n children: [{\n tag: main.icon.tag,\n children: main.icon.children,\n attributes: _objectSpread({}, main.icon.attributes, trans.path)\n }]\n }]\n });\n } else {\n children.push(main.icon);\n }\n\n return {\n children: children,\n attributes: attributes\n };\n }\n\n function asIcon (_ref) {\n var children = _ref.children,\n main = _ref.main,\n mask = _ref.mask,\n attributes = _ref.attributes,\n styles = _ref.styles,\n transform = _ref.transform;\n\n if (transformIsMeaningful(transform) && main.found && !mask.found) {\n var width = main.width,\n height = main.height;\n var offset = {\n x: width / height / 2,\n y: 0.5\n };\n attributes['style'] = joinStyles(_objectSpread({}, styles, {\n 'transform-origin': \"\".concat(offset.x + transform.x / 16, \"em \").concat(offset.y + transform.y / 16, \"em\")\n }));\n }\n\n return [{\n tag: 'svg',\n attributes: attributes,\n children: children\n }];\n }\n\n function asSymbol (_ref) {\n var prefix = _ref.prefix,\n iconName = _ref.iconName,\n children = _ref.children,\n attributes = _ref.attributes,\n symbol = _ref.symbol;\n var id = symbol === true ? \"\".concat(prefix, \"-\").concat(config.familyPrefix, \"-\").concat(iconName) : symbol;\n return [{\n tag: 'svg',\n attributes: {\n style: 'display: none;'\n },\n children: [{\n tag: 'symbol',\n attributes: _objectSpread({}, attributes, {\n id: id\n }),\n children: children\n }]\n }];\n }\n\n function makeInlineSvgAbstract(params) {\n var _params$icons = params.icons,\n main = _params$icons.main,\n mask = _params$icons.mask,\n prefix = params.prefix,\n iconName = params.iconName,\n transform = params.transform,\n symbol = params.symbol,\n title = params.title,\n maskId = params.maskId,\n titleId = params.titleId,\n extra = params.extra,\n _params$watchable = params.watchable,\n watchable = _params$watchable === void 0 ? false : _params$watchable;\n\n var _ref = mask.found ? mask : main,\n width = _ref.width,\n height = _ref.height;\n\n var isUploadedIcon = prefix === 'fak';\n var widthClass = isUploadedIcon ? '' : \"fa-w-\".concat(Math.ceil(width / height * 16));\n var attrClass = [config.replacementClass, iconName ? \"\".concat(config.familyPrefix, \"-\").concat(iconName) : '', widthClass].filter(function (c) {\n return extra.classes.indexOf(c) === -1;\n }).filter(function (c) {\n return c !== '' || !!c;\n }).concat(extra.classes).join(' ');\n var content = {\n children: [],\n attributes: _objectSpread({}, extra.attributes, {\n 'data-prefix': prefix,\n 'data-icon': iconName,\n 'class': attrClass,\n 'role': extra.attributes.role || 'img',\n 'xmlns': 'http://www.w3.org/2000/svg',\n 'viewBox': \"0 0 \".concat(width, \" \").concat(height)\n })\n };\n var uploadedIconWidthStyle = isUploadedIcon && !~extra.classes.indexOf('fa-fw') ? {\n width: \"\".concat(width / height * 16 * 0.0625, \"em\")\n } : {};\n\n if (watchable) {\n content.attributes[DATA_FA_I2SVG] = '';\n }\n\n if (title) content.children.push({\n tag: 'title',\n attributes: {\n id: content.attributes['aria-labelledby'] || \"title-\".concat(titleId || nextUniqueId())\n },\n children: [title]\n });\n\n var args = _objectSpread({}, content, {\n prefix: prefix,\n iconName: iconName,\n main: main,\n mask: mask,\n maskId: maskId,\n transform: transform,\n symbol: symbol,\n styles: _objectSpread({}, uploadedIconWidthStyle, extra.styles)\n });\n\n var _ref2 = mask.found && main.found ? makeIconMasking(args) : makeIconStandard(args),\n children = _ref2.children,\n attributes = _ref2.attributes;\n\n args.children = children;\n args.attributes = attributes;\n\n if (symbol) {\n return asSymbol(args);\n } else {\n return asIcon(args);\n }\n }\n function makeLayersTextAbstract(params) {\n var content = params.content,\n width = params.width,\n height = params.height,\n transform = params.transform,\n title = params.title,\n extra = params.extra,\n _params$watchable2 = params.watchable,\n watchable = _params$watchable2 === void 0 ? false : _params$watchable2;\n\n var attributes = _objectSpread({}, extra.attributes, title ? {\n 'title': title\n } : {}, {\n 'class': extra.classes.join(' ')\n });\n\n if (watchable) {\n attributes[DATA_FA_I2SVG] = '';\n }\n\n var styles = _objectSpread({}, extra.styles);\n\n if (transformIsMeaningful(transform)) {\n styles['transform'] = transformForCss({\n transform: transform,\n startCentered: true,\n width: width,\n height: height\n });\n styles['-webkit-transform'] = styles['transform'];\n }\n\n var styleString = joinStyles(styles);\n\n if (styleString.length > 0) {\n attributes['style'] = styleString;\n }\n\n var val = [];\n val.push({\n tag: 'span',\n attributes: attributes,\n children: [content]\n });\n\n if (title) {\n val.push({\n tag: 'span',\n attributes: {\n class: 'sr-only'\n },\n children: [title]\n });\n }\n\n return val;\n }\n function makeLayersCounterAbstract(params) {\n var content = params.content,\n title = params.title,\n extra = params.extra;\n\n var attributes = _objectSpread({}, extra.attributes, title ? {\n 'title': title\n } : {}, {\n 'class': extra.classes.join(' ')\n });\n\n var styleString = joinStyles(extra.styles);\n\n if (styleString.length > 0) {\n attributes['style'] = styleString;\n }\n\n var val = [];\n val.push({\n tag: 'span',\n attributes: attributes,\n children: [content]\n });\n\n if (title) {\n val.push({\n tag: 'span',\n attributes: {\n class: 'sr-only'\n },\n children: [title]\n });\n }\n\n return val;\n }\n\n var noop$1 = function noop() {};\n\n var p = config.measurePerformance && PERFORMANCE && PERFORMANCE.mark && PERFORMANCE.measure ? PERFORMANCE : {\n mark: noop$1,\n measure: noop$1\n };\n var preamble = \"FA \\\"5.15.4\\\"\";\n\n var begin = function begin(name) {\n p.mark(\"\".concat(preamble, \" \").concat(name, \" begins\"));\n return function () {\n return end(name);\n };\n };\n\n var end = function end(name) {\n p.mark(\"\".concat(preamble, \" \").concat(name, \" ends\"));\n p.measure(\"\".concat(preamble, \" \").concat(name), \"\".concat(preamble, \" \").concat(name, \" begins\"), \"\".concat(preamble, \" \").concat(name, \" ends\"));\n };\n\n var perf = {\n begin: begin,\n end: end\n };\n\n /**\n * Internal helper to bind a function known to have 4 arguments\n * to a given context.\n */\n\n var bindInternal4 = function bindInternal4(func, thisContext) {\n return function (a, b, c, d) {\n return func.call(thisContext, a, b, c, d);\n };\n };\n\n /**\n * # Reduce\n *\n * A fast object `.reduce()` implementation.\n *\n * @param {Object} subject The object to reduce over.\n * @param {Function} fn The reducer function.\n * @param {mixed} initialValue The initial value for the reducer, defaults to subject[0].\n * @param {Object} thisContext The context for the reducer.\n * @return {mixed} The final result.\n */\n\n\n var reduce = function fastReduceObject(subject, fn, initialValue, thisContext) {\n var keys = Object.keys(subject),\n length = keys.length,\n iterator = thisContext !== undefined ? bindInternal4(fn, thisContext) : fn,\n i,\n key,\n result;\n\n if (initialValue === undefined) {\n i = 1;\n result = subject[keys[0]];\n } else {\n i = 0;\n result = initialValue;\n }\n\n for (; i < length; i++) {\n key = keys[i];\n result = iterator(result, subject[key], key, subject);\n }\n\n return result;\n };\n\n function toHex(unicode) {\n var result = '';\n\n for (var i = 0; i < unicode.length; i++) {\n var hex = unicode.charCodeAt(i).toString(16);\n result += ('000' + hex).slice(-4);\n }\n\n return result;\n }\n\n function defineIcons(prefix, icons) {\n var params = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {};\n var _params$skipHooks = params.skipHooks,\n skipHooks = _params$skipHooks === void 0 ? false : _params$skipHooks;\n var normalized = Object.keys(icons).reduce(function (acc, iconName) {\n var icon = icons[iconName];\n var expanded = !!icon.icon;\n\n if (expanded) {\n acc[icon.iconName] = icon.icon;\n } else {\n acc[iconName] = icon;\n }\n\n return acc;\n }, {});\n\n if (typeof namespace.hooks.addPack === 'function' && !skipHooks) {\n namespace.hooks.addPack(prefix, normalized);\n } else {\n namespace.styles[prefix] = _objectSpread({}, namespace.styles[prefix] || {}, normalized);\n }\n /**\n * Font Awesome 4 used the prefix of `fa` for all icons. With the introduction\n * of new styles we needed to differentiate between them. Prefix `fa` is now an alias\n * for `fas` so we'll easy the upgrade process for our users by automatically defining\n * this as well.\n */\n\n\n if (prefix === 'fas') {\n defineIcons('fa', icons);\n }\n }\n\n var styles = namespace.styles,\n shims = namespace.shims;\n var _byUnicode = {};\n var _byLigature = {};\n var _byOldName = {};\n var build = function build() {\n var lookup = function lookup(reducer) {\n return reduce(styles, function (o, style, prefix) {\n o[prefix] = reduce(style, reducer, {});\n return o;\n }, {});\n };\n\n _byUnicode = lookup(function (acc, icon, iconName) {\n if (icon[3]) {\n acc[icon[3]] = iconName;\n }\n\n return acc;\n });\n _byLigature = lookup(function (acc, icon, iconName) {\n var ligatures = icon[2];\n acc[iconName] = iconName;\n ligatures.forEach(function (ligature) {\n acc[ligature] = iconName;\n });\n return acc;\n });\n var hasRegular = 'far' in styles;\n _byOldName = reduce(shims, function (acc, shim) {\n var oldName = shim[0];\n var prefix = shim[1];\n var iconName = shim[2];\n\n if (prefix === 'far' && !hasRegular) {\n prefix = 'fas';\n }\n\n acc[oldName] = {\n prefix: prefix,\n iconName: iconName\n };\n return acc;\n }, {});\n };\n build();\n function byUnicode(prefix, unicode) {\n return (_byUnicode[prefix] || {})[unicode];\n }\n function byLigature(prefix, ligature) {\n return (_byLigature[prefix] || {})[ligature];\n }\n function byOldName(name) {\n return _byOldName[name] || {\n prefix: null,\n iconName: null\n };\n }\n\n var styles$1 = namespace.styles;\n var emptyCanonicalIcon = function emptyCanonicalIcon() {\n return {\n prefix: null,\n iconName: null,\n rest: []\n };\n };\n function getCanonicalIcon(values) {\n return values.reduce(function (acc, cls) {\n var iconName = getIconName(config.familyPrefix, cls);\n\n if (styles$1[cls]) {\n acc.prefix = cls;\n } else if (config.autoFetchSvg && Object.keys(PREFIX_TO_STYLE).indexOf(cls) > -1) {\n acc.prefix = cls;\n } else if (iconName) {\n var shim = acc.prefix === 'fa' ? byOldName(iconName) : {};\n acc.iconName = shim.iconName || iconName;\n acc.prefix = shim.prefix || acc.prefix;\n } else if (cls !== config.replacementClass && cls.indexOf('fa-w-') !== 0) {\n acc.rest.push(cls);\n }\n\n return acc;\n }, emptyCanonicalIcon());\n }\n function iconFromMapping(mapping, prefix, iconName) {\n if (mapping && mapping[prefix] && mapping[prefix][iconName]) {\n return {\n prefix: prefix,\n iconName: iconName,\n icon: mapping[prefix][iconName]\n };\n }\n }\n\n function toHtml(abstractNodes) {\n var tag = abstractNodes.tag,\n _abstractNodes$attrib = abstractNodes.attributes,\n attributes = _abstractNodes$attrib === void 0 ? {} : _abstractNodes$attrib,\n _abstractNodes$childr = abstractNodes.children,\n children = _abstractNodes$childr === void 0 ? [] : _abstractNodes$childr;\n\n if (typeof abstractNodes === 'string') {\n return htmlEscape(abstractNodes);\n } else {\n return \"<\".concat(tag, \" \").concat(joinAttributes(attributes), \">\").concat(children.map(toHtml).join(''), \"\");\n }\n }\n\n var noop$2 = function noop() {};\n\n function isWatched(node) {\n var i2svg = node.getAttribute ? node.getAttribute(DATA_FA_I2SVG) : null;\n return typeof i2svg === 'string';\n }\n\n function getMutator() {\n if (config.autoReplaceSvg === true) {\n return mutators.replace;\n }\n\n var mutator = mutators[config.autoReplaceSvg];\n return mutator || mutators.replace;\n }\n\n var mutators = {\n replace: function replace(mutation) {\n var node = mutation[0];\n var abstract = mutation[1];\n var newOuterHTML = abstract.map(function (a) {\n return toHtml(a);\n }).join('\\n');\n\n if (node.parentNode && node.outerHTML) {\n node.outerHTML = newOuterHTML + (config.keepOriginalSource && node.tagName.toLowerCase() !== 'svg' ? \"\") : '');\n } else if (node.parentNode) {\n var newNode = document.createElement('span');\n node.parentNode.replaceChild(newNode, node);\n newNode.outerHTML = newOuterHTML;\n }\n },\n nest: function nest(mutation) {\n var node = mutation[0];\n var abstract = mutation[1]; // If we already have a replaced node we do not want to continue nesting within it.\n // Short-circuit to the standard replacement\n\n if (~classArray(node).indexOf(config.replacementClass)) {\n return mutators.replace(mutation);\n }\n\n var forSvg = new RegExp(\"\".concat(config.familyPrefix, \"-.*\"));\n delete abstract[0].attributes.style;\n delete abstract[0].attributes.id;\n var splitClasses = abstract[0].attributes.class.split(' ').reduce(function (acc, cls) {\n if (cls === config.replacementClass || cls.match(forSvg)) {\n acc.toSvg.push(cls);\n } else {\n acc.toNode.push(cls);\n }\n\n return acc;\n }, {\n toNode: [],\n toSvg: []\n });\n abstract[0].attributes.class = splitClasses.toSvg.join(' ');\n var newInnerHTML = abstract.map(function (a) {\n return toHtml(a);\n }).join('\\n');\n node.setAttribute('class', splitClasses.toNode.join(' '));\n node.setAttribute(DATA_FA_I2SVG, '');\n node.innerHTML = newInnerHTML;\n }\n };\n\n function performOperationSync(op) {\n op();\n }\n\n function perform(mutations, callback) {\n var callbackFunction = typeof callback === 'function' ? callback : noop$2;\n\n if (mutations.length === 0) {\n callbackFunction();\n } else {\n var frame = performOperationSync;\n\n if (config.mutateApproach === MUTATION_APPROACH_ASYNC) {\n frame = WINDOW.requestAnimationFrame || performOperationSync;\n }\n\n frame(function () {\n var mutator = getMutator();\n var mark = perf.begin('mutate');\n mutations.map(mutator);\n mark();\n callbackFunction();\n });\n }\n }\n var disabled = false;\n function disableObservation() {\n disabled = true;\n }\n function enableObservation() {\n disabled = false;\n }\n var mo = null;\n function observe(options) {\n if (!MUTATION_OBSERVER) {\n return;\n }\n\n if (!config.observeMutations) {\n return;\n }\n\n var treeCallback = options.treeCallback,\n nodeCallback = options.nodeCallback,\n pseudoElementsCallback = options.pseudoElementsCallback,\n _options$observeMutat = options.observeMutationsRoot,\n observeMutationsRoot = _options$observeMutat === void 0 ? DOCUMENT : _options$observeMutat;\n mo = new MUTATION_OBSERVER(function (objects) {\n if (disabled) return;\n toArray(objects).forEach(function (mutationRecord) {\n if (mutationRecord.type === 'childList' && mutationRecord.addedNodes.length > 0 && !isWatched(mutationRecord.addedNodes[0])) {\n if (config.searchPseudoElements) {\n pseudoElementsCallback(mutationRecord.target);\n }\n\n treeCallback(mutationRecord.target);\n }\n\n if (mutationRecord.type === 'attributes' && mutationRecord.target.parentNode && config.searchPseudoElements) {\n pseudoElementsCallback(mutationRecord.target.parentNode);\n }\n\n if (mutationRecord.type === 'attributes' && isWatched(mutationRecord.target) && ~ATTRIBUTES_WATCHED_FOR_MUTATION.indexOf(mutationRecord.attributeName)) {\n if (mutationRecord.attributeName === 'class') {\n var _getCanonicalIcon = getCanonicalIcon(classArray(mutationRecord.target)),\n prefix = _getCanonicalIcon.prefix,\n iconName = _getCanonicalIcon.iconName;\n\n if (prefix) mutationRecord.target.setAttribute('data-prefix', prefix);\n if (iconName) mutationRecord.target.setAttribute('data-icon', iconName);\n } else {\n nodeCallback(mutationRecord.target);\n }\n }\n });\n });\n if (!IS_DOM) return;\n mo.observe(observeMutationsRoot, {\n childList: true,\n attributes: true,\n characterData: true,\n subtree: true\n });\n }\n function disconnect() {\n if (!mo) return;\n mo.disconnect();\n }\n\n function styleParser (node) {\n var style = node.getAttribute('style');\n var val = [];\n\n if (style) {\n val = style.split(';').reduce(function (acc, style) {\n var styles = style.split(':');\n var prop = styles[0];\n var value = styles.slice(1);\n\n if (prop && value.length > 0) {\n acc[prop] = value.join(':').trim();\n }\n\n return acc;\n }, {});\n }\n\n return val;\n }\n\n function classParser (node) {\n var existingPrefix = node.getAttribute('data-prefix');\n var existingIconName = node.getAttribute('data-icon');\n var innerText = node.innerText !== undefined ? node.innerText.trim() : '';\n var val = getCanonicalIcon(classArray(node));\n\n if (existingPrefix && existingIconName) {\n val.prefix = existingPrefix;\n val.iconName = existingIconName;\n }\n\n if (val.prefix && innerText.length > 1) {\n val.iconName = byLigature(val.prefix, node.innerText);\n } else if (val.prefix && innerText.length === 1) {\n val.iconName = byUnicode(val.prefix, toHex(node.innerText));\n }\n\n return val;\n }\n\n var parseTransformString = function parseTransformString(transformString) {\n var transform = {\n size: 16,\n x: 0,\n y: 0,\n flipX: false,\n flipY: false,\n rotate: 0\n };\n\n if (!transformString) {\n return transform;\n } else {\n return transformString.toLowerCase().split(' ').reduce(function (acc, n) {\n var parts = n.toLowerCase().split('-');\n var first = parts[0];\n var rest = parts.slice(1).join('-');\n\n if (first && rest === 'h') {\n acc.flipX = true;\n return acc;\n }\n\n if (first && rest === 'v') {\n acc.flipY = true;\n return acc;\n }\n\n rest = parseFloat(rest);\n\n if (isNaN(rest)) {\n return acc;\n }\n\n switch (first) {\n case 'grow':\n acc.size = acc.size + rest;\n break;\n\n case 'shrink':\n acc.size = acc.size - rest;\n break;\n\n case 'left':\n acc.x = acc.x - rest;\n break;\n\n case 'right':\n acc.x = acc.x + rest;\n break;\n\n case 'up':\n acc.y = acc.y - rest;\n break;\n\n case 'down':\n acc.y = acc.y + rest;\n break;\n\n case 'rotate':\n acc.rotate = acc.rotate + rest;\n break;\n }\n\n return acc;\n }, transform);\n }\n };\n function transformParser (node) {\n return parseTransformString(node.getAttribute('data-fa-transform'));\n }\n\n function symbolParser (node) {\n var symbol = node.getAttribute('data-fa-symbol');\n return symbol === null ? false : symbol === '' ? true : symbol;\n }\n\n function attributesParser (node) {\n var extraAttributes = toArray(node.attributes).reduce(function (acc, attr) {\n if (acc.name !== 'class' && acc.name !== 'style') {\n acc[attr.name] = attr.value;\n }\n\n return acc;\n }, {});\n var title = node.getAttribute('title');\n var titleId = node.getAttribute('data-fa-title-id');\n\n if (config.autoA11y) {\n if (title) {\n extraAttributes['aria-labelledby'] = \"\".concat(config.replacementClass, \"-title-\").concat(titleId || nextUniqueId());\n } else {\n extraAttributes['aria-hidden'] = 'true';\n extraAttributes['focusable'] = 'false';\n }\n }\n\n return extraAttributes;\n }\n\n function maskParser (node) {\n var mask = node.getAttribute('data-fa-mask');\n\n if (!mask) {\n return emptyCanonicalIcon();\n } else {\n return getCanonicalIcon(mask.split(' ').map(function (i) {\n return i.trim();\n }));\n }\n }\n\n function blankMeta() {\n return {\n iconName: null,\n title: null,\n titleId: null,\n prefix: null,\n transform: meaninglessTransform,\n symbol: false,\n mask: null,\n maskId: null,\n extra: {\n classes: [],\n styles: {},\n attributes: {}\n }\n };\n }\n function parseMeta(node) {\n var _classParser = classParser(node),\n iconName = _classParser.iconName,\n prefix = _classParser.prefix,\n extraClasses = _classParser.rest;\n\n var extraStyles = styleParser(node);\n var transform = transformParser(node);\n var symbol = symbolParser(node);\n var extraAttributes = attributesParser(node);\n var mask = maskParser(node);\n return {\n iconName: iconName,\n title: node.getAttribute('title'),\n titleId: node.getAttribute('data-fa-title-id'),\n prefix: prefix,\n transform: transform,\n symbol: symbol,\n mask: mask,\n maskId: node.getAttribute('data-fa-mask-id'),\n extra: {\n classes: extraClasses,\n styles: extraStyles,\n attributes: extraAttributes\n }\n };\n }\n\n function MissingIcon(error) {\n this.name = 'MissingIcon';\n this.message = error || 'Icon unavailable';\n this.stack = new Error().stack;\n }\n MissingIcon.prototype = Object.create(Error.prototype);\n MissingIcon.prototype.constructor = MissingIcon;\n\n var FILL = {\n fill: 'currentColor'\n };\n var ANIMATION_BASE = {\n attributeType: 'XML',\n repeatCount: 'indefinite',\n dur: '2s'\n };\n var RING = {\n tag: 'path',\n attributes: _objectSpread({}, FILL, {\n d: 'M156.5,447.7l-12.6,29.5c-18.7-9.5-35.9-21.2-51.5-34.9l22.7-22.7C127.6,430.5,141.5,440,156.5,447.7z M40.6,272H8.5 c1.4,21.2,5.4,41.7,11.7,61.1L50,321.2C45.1,305.5,41.8,289,40.6,272z M40.6,240c1.4-18.8,5.2-37,11.1-54.1l-29.5-12.6 C14.7,194.3,10,216.7,8.5,240H40.6z M64.3,156.5c7.8-14.9,17.2-28.8,28.1-41.5L69.7,92.3c-13.7,15.6-25.5,32.8-34.9,51.5 L64.3,156.5z M397,419.6c-13.9,12-29.4,22.3-46.1,30.4l11.9,29.8c20.7-9.9,39.8-22.6,56.9-37.6L397,419.6z M115,92.4 c13.9-12,29.4-22.3,46.1-30.4l-11.9-29.8c-20.7,9.9-39.8,22.6-56.8,37.6L115,92.4z M447.7,355.5c-7.8,14.9-17.2,28.8-28.1,41.5 l22.7,22.7c13.7-15.6,25.5-32.9,34.9-51.5L447.7,355.5z M471.4,272c-1.4,18.8-5.2,37-11.1,54.1l29.5,12.6 c7.5-21.1,12.2-43.5,13.6-66.8H471.4z M321.2,462c-15.7,5-32.2,8.2-49.2,9.4v32.1c21.2-1.4,41.7-5.4,61.1-11.7L321.2,462z M240,471.4c-18.8-1.4-37-5.2-54.1-11.1l-12.6,29.5c21.1,7.5,43.5,12.2,66.8,13.6V471.4z M462,190.8c5,15.7,8.2,32.2,9.4,49.2h32.1 c-1.4-21.2-5.4-41.7-11.7-61.1L462,190.8z M92.4,397c-12-13.9-22.3-29.4-30.4-46.1l-29.8,11.9c9.9,20.7,22.6,39.8,37.6,56.9 L92.4,397z M272,40.6c18.8,1.4,36.9,5.2,54.1,11.1l12.6-29.5C317.7,14.7,295.3,10,272,8.5V40.6z M190.8,50 c15.7-5,32.2-8.2,49.2-9.4V8.5c-21.2,1.4-41.7,5.4-61.1,11.7L190.8,50z M442.3,92.3L419.6,115c12,13.9,22.3,29.4,30.5,46.1 l29.8-11.9C470,128.5,457.3,109.4,442.3,92.3z M397,92.4l22.7-22.7c-15.6-13.7-32.8-25.5-51.5-34.9l-12.6,29.5 C370.4,72.1,384.4,81.5,397,92.4z'\n })\n };\n\n var OPACITY_ANIMATE = _objectSpread({}, ANIMATION_BASE, {\n attributeName: 'opacity'\n });\n\n var DOT = {\n tag: 'circle',\n attributes: _objectSpread({}, FILL, {\n cx: '256',\n cy: '364',\n r: '28'\n }),\n children: [{\n tag: 'animate',\n attributes: _objectSpread({}, ANIMATION_BASE, {\n attributeName: 'r',\n values: '28;14;28;28;14;28;'\n })\n }, {\n tag: 'animate',\n attributes: _objectSpread({}, OPACITY_ANIMATE, {\n values: '1;0;1;1;0;1;'\n })\n }]\n };\n var QUESTION = {\n tag: 'path',\n attributes: _objectSpread({}, FILL, {\n opacity: '1',\n d: 'M263.7,312h-16c-6.6,0-12-5.4-12-12c0-71,77.4-63.9,77.4-107.8c0-20-17.8-40.2-57.4-40.2c-29.1,0-44.3,9.6-59.2,28.7 c-3.9,5-11.1,6-16.2,2.4l-13.1-9.2c-5.6-3.9-6.9-11.8-2.6-17.2c21.2-27.2,46.4-44.7,91.2-44.7c52.3,0,97.4,29.8,97.4,80.2 c0,67.6-77.4,63.5-77.4,107.8C275.7,306.6,270.3,312,263.7,312z'\n }),\n children: [{\n tag: 'animate',\n attributes: _objectSpread({}, OPACITY_ANIMATE, {\n values: '1;0;0;0;0;1;'\n })\n }]\n };\n var EXCLAMATION = {\n tag: 'path',\n attributes: _objectSpread({}, FILL, {\n opacity: '0',\n d: 'M232.5,134.5l7,168c0.3,6.4,5.6,11.5,12,11.5h9c6.4,0,11.7-5.1,12-11.5l7-168c0.3-6.8-5.2-12.5-12-12.5h-23 C237.7,122,232.2,127.7,232.5,134.5z'\n }),\n children: [{\n tag: 'animate',\n attributes: _objectSpread({}, OPACITY_ANIMATE, {\n values: '0;0;1;1;0;0;'\n })\n }]\n };\n var missing = {\n tag: 'g',\n children: [RING, DOT, QUESTION, EXCLAMATION]\n };\n\n var styles$2 = namespace.styles;\n function asFoundIcon(icon) {\n var width = icon[0];\n var height = icon[1];\n\n var _icon$slice = icon.slice(4),\n _icon$slice2 = _slicedToArray(_icon$slice, 1),\n vectorData = _icon$slice2[0];\n\n var element = null;\n\n if (Array.isArray(vectorData)) {\n element = {\n tag: 'g',\n attributes: {\n class: \"\".concat(config.familyPrefix, \"-\").concat(DUOTONE_CLASSES.GROUP)\n },\n children: [{\n tag: 'path',\n attributes: {\n class: \"\".concat(config.familyPrefix, \"-\").concat(DUOTONE_CLASSES.SECONDARY),\n fill: 'currentColor',\n d: vectorData[0]\n }\n }, {\n tag: 'path',\n attributes: {\n class: \"\".concat(config.familyPrefix, \"-\").concat(DUOTONE_CLASSES.PRIMARY),\n fill: 'currentColor',\n d: vectorData[1]\n }\n }]\n };\n } else {\n element = {\n tag: 'path',\n attributes: {\n fill: 'currentColor',\n d: vectorData\n }\n };\n }\n\n return {\n found: true,\n width: width,\n height: height,\n icon: element\n };\n }\n function findIcon(iconName, prefix) {\n return new picked(function (resolve, reject) {\n var val = {\n found: false,\n width: 512,\n height: 512,\n icon: missing\n };\n\n if (iconName && prefix && styles$2[prefix] && styles$2[prefix][iconName]) {\n var icon = styles$2[prefix][iconName];\n return resolve(asFoundIcon(icon));\n }\n\n if (iconName && prefix && !config.showMissingIcons) {\n reject(new MissingIcon(\"Icon is missing for prefix \".concat(prefix, \" with icon name \").concat(iconName)));\n } else {\n resolve(val);\n }\n });\n }\n\n var styles$3 = namespace.styles;\n\n function generateSvgReplacementMutation(node, nodeMeta) {\n var iconName = nodeMeta.iconName,\n title = nodeMeta.title,\n titleId = nodeMeta.titleId,\n prefix = nodeMeta.prefix,\n transform = nodeMeta.transform,\n symbol = nodeMeta.symbol,\n mask = nodeMeta.mask,\n maskId = nodeMeta.maskId,\n extra = nodeMeta.extra;\n return new picked(function (resolve, reject) {\n picked.all([findIcon(iconName, prefix), findIcon(mask.iconName, mask.prefix)]).then(function (_ref) {\n var _ref2 = _slicedToArray(_ref, 2),\n main = _ref2[0],\n mask = _ref2[1];\n\n resolve([node, makeInlineSvgAbstract({\n icons: {\n main: main,\n mask: mask\n },\n prefix: prefix,\n iconName: iconName,\n transform: transform,\n symbol: symbol,\n mask: mask,\n maskId: maskId,\n title: title,\n titleId: titleId,\n extra: extra,\n watchable: true\n })]);\n });\n });\n }\n\n function generateLayersText(node, nodeMeta) {\n var title = nodeMeta.title,\n transform = nodeMeta.transform,\n extra = nodeMeta.extra;\n var width = null;\n var height = null;\n\n if (IS_IE) {\n var computedFontSize = parseInt(getComputedStyle(node).fontSize, 10);\n var boundingClientRect = node.getBoundingClientRect();\n width = boundingClientRect.width / computedFontSize;\n height = boundingClientRect.height / computedFontSize;\n }\n\n if (config.autoA11y && !title) {\n extra.attributes['aria-hidden'] = 'true';\n }\n\n return picked.resolve([node, makeLayersTextAbstract({\n content: node.innerHTML,\n width: width,\n height: height,\n transform: transform,\n title: title,\n extra: extra,\n watchable: true\n })]);\n }\n\n function generateMutation(node) {\n var nodeMeta = parseMeta(node);\n\n if (~nodeMeta.extra.classes.indexOf(LAYERS_TEXT_CLASSNAME)) {\n return generateLayersText(node, nodeMeta);\n } else {\n return generateSvgReplacementMutation(node, nodeMeta);\n }\n }\n\n function onTree(root) {\n var callback = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : null;\n if (!IS_DOM) return;\n var htmlClassList = DOCUMENT.documentElement.classList;\n\n var hclAdd = function hclAdd(suffix) {\n return htmlClassList.add(\"\".concat(HTML_CLASS_I2SVG_BASE_CLASS, \"-\").concat(suffix));\n };\n\n var hclRemove = function hclRemove(suffix) {\n return htmlClassList.remove(\"\".concat(HTML_CLASS_I2SVG_BASE_CLASS, \"-\").concat(suffix));\n };\n\n var prefixes = config.autoFetchSvg ? Object.keys(PREFIX_TO_STYLE) : Object.keys(styles$3);\n var prefixesDomQuery = [\".\".concat(LAYERS_TEXT_CLASSNAME, \":not([\").concat(DATA_FA_I2SVG, \"])\")].concat(prefixes.map(function (p) {\n return \".\".concat(p, \":not([\").concat(DATA_FA_I2SVG, \"])\");\n })).join(', ');\n\n if (prefixesDomQuery.length === 0) {\n return;\n }\n\n var candidates = [];\n\n try {\n candidates = toArray(root.querySelectorAll(prefixesDomQuery));\n } catch (e) {// noop\n }\n\n if (candidates.length > 0) {\n hclAdd('pending');\n hclRemove('complete');\n } else {\n return;\n }\n\n var mark = perf.begin('onTree');\n var mutations = candidates.reduce(function (acc, node) {\n try {\n var mutation = generateMutation(node);\n\n if (mutation) {\n acc.push(mutation);\n }\n } catch (e) {\n if (!PRODUCTION) {\n if (e instanceof MissingIcon) {\n console.error(e);\n }\n }\n }\n\n return acc;\n }, []);\n return new picked(function (resolve, reject) {\n picked.all(mutations).then(function (resolvedMutations) {\n perform(resolvedMutations, function () {\n hclAdd('active');\n hclAdd('complete');\n hclRemove('pending');\n if (typeof callback === 'function') callback();\n mark();\n resolve();\n });\n }).catch(function () {\n mark();\n reject();\n });\n });\n }\n function onNode(node) {\n var callback = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : null;\n generateMutation(node).then(function (mutation) {\n if (mutation) {\n perform([mutation], callback);\n }\n });\n }\n\n function replaceForPosition(node, position) {\n var pendingAttribute = \"\".concat(DATA_FA_PSEUDO_ELEMENT_PENDING).concat(position.replace(':', '-'));\n return new picked(function (resolve, reject) {\n if (node.getAttribute(pendingAttribute) !== null) {\n // This node is already being processed\n return resolve();\n }\n\n var children = toArray(node.children);\n var alreadyProcessedPseudoElement = children.filter(function (c) {\n return c.getAttribute(DATA_FA_PSEUDO_ELEMENT) === position;\n })[0];\n var styles = WINDOW.getComputedStyle(node, position);\n var fontFamily = styles.getPropertyValue('font-family').match(FONT_FAMILY_PATTERN);\n var fontWeight = styles.getPropertyValue('font-weight');\n var content = styles.getPropertyValue('content');\n\n if (alreadyProcessedPseudoElement && !fontFamily) {\n // If we've already processed it but the current computed style does not result in a font-family,\n // that probably means that a class name that was previously present to make the icon has been\n // removed. So we now should delete the icon.\n node.removeChild(alreadyProcessedPseudoElement);\n return resolve();\n } else if (fontFamily && content !== 'none' && content !== '') {\n var _content = styles.getPropertyValue('content');\n\n var prefix = ~['Solid', 'Regular', 'Light', 'Duotone', 'Brands', 'Kit'].indexOf(fontFamily[2]) ? STYLE_TO_PREFIX[fontFamily[2].toLowerCase()] : FONT_WEIGHT_TO_PREFIX[fontWeight];\n var hexValue = toHex(_content.length === 3 ? _content.substr(1, 1) : _content);\n var iconName = byUnicode(prefix, hexValue);\n var iconIdentifier = iconName; // Only convert the pseudo element in this :before/:after position into an icon if we haven't\n // already done so with the same prefix and iconName\n\n if (iconName && (!alreadyProcessedPseudoElement || alreadyProcessedPseudoElement.getAttribute(DATA_PREFIX) !== prefix || alreadyProcessedPseudoElement.getAttribute(DATA_ICON) !== iconIdentifier)) {\n node.setAttribute(pendingAttribute, iconIdentifier);\n\n if (alreadyProcessedPseudoElement) {\n // Delete the old one, since we're replacing it with a new one\n node.removeChild(alreadyProcessedPseudoElement);\n }\n\n var meta = blankMeta();\n var extra = meta.extra;\n extra.attributes[DATA_FA_PSEUDO_ELEMENT] = position;\n findIcon(iconName, prefix).then(function (main) {\n var abstract = makeInlineSvgAbstract(_objectSpread({}, meta, {\n icons: {\n main: main,\n mask: emptyCanonicalIcon()\n },\n prefix: prefix,\n iconName: iconIdentifier,\n extra: extra,\n watchable: true\n }));\n var element = DOCUMENT.createElement('svg');\n\n if (position === ':before') {\n node.insertBefore(element, node.firstChild);\n } else {\n node.appendChild(element);\n }\n\n element.outerHTML = abstract.map(function (a) {\n return toHtml(a);\n }).join('\\n');\n node.removeAttribute(pendingAttribute);\n resolve();\n }).catch(reject);\n } else {\n resolve();\n }\n } else {\n resolve();\n }\n });\n }\n\n function replace(node) {\n return picked.all([replaceForPosition(node, ':before'), replaceForPosition(node, ':after')]);\n }\n\n function processable(node) {\n return node.parentNode !== document.head && !~TAGNAMES_TO_SKIP_FOR_PSEUDOELEMENTS.indexOf(node.tagName.toUpperCase()) && !node.getAttribute(DATA_FA_PSEUDO_ELEMENT) && (!node.parentNode || node.parentNode.tagName !== 'svg');\n }\n\n function searchPseudoElements (root) {\n if (!IS_DOM) return;\n return new picked(function (resolve, reject) {\n var operations = toArray(root.querySelectorAll('*')).filter(processable).map(replace);\n var end = perf.begin('searchPseudoElements');\n disableObservation();\n picked.all(operations).then(function () {\n end();\n enableObservation();\n resolve();\n }).catch(function () {\n end();\n enableObservation();\n reject();\n });\n });\n }\n\n var baseStyles = \"svg:not(:root).svg-inline--fa{overflow:visible}.svg-inline--fa{display:inline-block;font-size:inherit;height:1em;overflow:visible;vertical-align:-.125em}.svg-inline--fa.fa-lg{vertical-align:-.225em}.svg-inline--fa.fa-w-1{width:.0625em}.svg-inline--fa.fa-w-2{width:.125em}.svg-inline--fa.fa-w-3{width:.1875em}.svg-inline--fa.fa-w-4{width:.25em}.svg-inline--fa.fa-w-5{width:.3125em}.svg-inline--fa.fa-w-6{width:.375em}.svg-inline--fa.fa-w-7{width:.4375em}.svg-inline--fa.fa-w-8{width:.5em}.svg-inline--fa.fa-w-9{width:.5625em}.svg-inline--fa.fa-w-10{width:.625em}.svg-inline--fa.fa-w-11{width:.6875em}.svg-inline--fa.fa-w-12{width:.75em}.svg-inline--fa.fa-w-13{width:.8125em}.svg-inline--fa.fa-w-14{width:.875em}.svg-inline--fa.fa-w-15{width:.9375em}.svg-inline--fa.fa-w-16{width:1em}.svg-inline--fa.fa-w-17{width:1.0625em}.svg-inline--fa.fa-w-18{width:1.125em}.svg-inline--fa.fa-w-19{width:1.1875em}.svg-inline--fa.fa-w-20{width:1.25em}.svg-inline--fa.fa-pull-left{margin-right:.3em;width:auto}.svg-inline--fa.fa-pull-right{margin-left:.3em;width:auto}.svg-inline--fa.fa-border{height:1.5em}.svg-inline--fa.fa-li{width:2em}.svg-inline--fa.fa-fw{width:1.25em}.fa-layers svg.svg-inline--fa{bottom:0;left:0;margin:auto;position:absolute;right:0;top:0}.fa-layers{display:inline-block;height:1em;position:relative;text-align:center;vertical-align:-.125em;width:1em}.fa-layers svg.svg-inline--fa{-webkit-transform-origin:center center;transform-origin:center center}.fa-layers-counter,.fa-layers-text{display:inline-block;position:absolute;text-align:center}.fa-layers-text{left:50%;top:50%;-webkit-transform:translate(-50%,-50%);transform:translate(-50%,-50%);-webkit-transform-origin:center center;transform-origin:center center}.fa-layers-counter{background-color:#ff253a;border-radius:1em;-webkit-box-sizing:border-box;box-sizing:border-box;color:#fff;height:1.5em;line-height:1;max-width:5em;min-width:1.5em;overflow:hidden;padding:.25em;right:0;text-overflow:ellipsis;top:0;-webkit-transform:scale(.25);transform:scale(.25);-webkit-transform-origin:top right;transform-origin:top right}.fa-layers-bottom-right{bottom:0;right:0;top:auto;-webkit-transform:scale(.25);transform:scale(.25);-webkit-transform-origin:bottom right;transform-origin:bottom right}.fa-layers-bottom-left{bottom:0;left:0;right:auto;top:auto;-webkit-transform:scale(.25);transform:scale(.25);-webkit-transform-origin:bottom left;transform-origin:bottom left}.fa-layers-top-right{right:0;top:0;-webkit-transform:scale(.25);transform:scale(.25);-webkit-transform-origin:top right;transform-origin:top right}.fa-layers-top-left{left:0;right:auto;top:0;-webkit-transform:scale(.25);transform:scale(.25);-webkit-transform-origin:top left;transform-origin:top left}.fa-lg{font-size:1.3333333333em;line-height:.75em;vertical-align:-.0667em}.fa-xs{font-size:.75em}.fa-sm{font-size:.875em}.fa-1x{font-size:1em}.fa-2x{font-size:2em}.fa-3x{font-size:3em}.fa-4x{font-size:4em}.fa-5x{font-size:5em}.fa-6x{font-size:6em}.fa-7x{font-size:7em}.fa-8x{font-size:8em}.fa-9x{font-size:9em}.fa-10x{font-size:10em}.fa-fw{text-align:center;width:1.25em}.fa-ul{list-style-type:none;margin-left:2.5em;padding-left:0}.fa-ul>li{position:relative}.fa-li{left:-2em;position:absolute;text-align:center;width:2em;line-height:inherit}.fa-border{border:solid .08em #eee;border-radius:.1em;padding:.2em .25em .15em}.fa-pull-left{float:left}.fa-pull-right{float:right}.fa.fa-pull-left,.fab.fa-pull-left,.fal.fa-pull-left,.far.fa-pull-left,.fas.fa-pull-left{margin-right:.3em}.fa.fa-pull-right,.fab.fa-pull-right,.fal.fa-pull-right,.far.fa-pull-right,.fas.fa-pull-right{margin-left:.3em}.fa-spin{-webkit-animation:fa-spin 2s infinite linear;animation:fa-spin 2s infinite linear}.fa-pulse{-webkit-animation:fa-spin 1s infinite steps(8);animation:fa-spin 1s infinite steps(8)}@-webkit-keyframes fa-spin{0%{-webkit-transform:rotate(0);transform:rotate(0)}100%{-webkit-transform:rotate(360deg);transform:rotate(360deg)}}@keyframes fa-spin{0%{-webkit-transform:rotate(0);transform:rotate(0)}100%{-webkit-transform:rotate(360deg);transform:rotate(360deg)}}.fa-rotate-90{-webkit-transform:rotate(90deg);transform:rotate(90deg)}.fa-rotate-180{-webkit-transform:rotate(180deg);transform:rotate(180deg)}.fa-rotate-270{-webkit-transform:rotate(270deg);transform:rotate(270deg)}.fa-flip-horizontal{-webkit-transform:scale(-1,1);transform:scale(-1,1)}.fa-flip-vertical{-webkit-transform:scale(1,-1);transform:scale(1,-1)}.fa-flip-both,.fa-flip-horizontal.fa-flip-vertical{-webkit-transform:scale(-1,-1);transform:scale(-1,-1)}:root .fa-flip-both,:root .fa-flip-horizontal,:root .fa-flip-vertical,:root .fa-rotate-180,:root .fa-rotate-270,:root .fa-rotate-90{-webkit-filter:none;filter:none}.fa-stack{display:inline-block;height:2em;position:relative;width:2.5em}.fa-stack-1x,.fa-stack-2x{bottom:0;left:0;margin:auto;position:absolute;right:0;top:0}.svg-inline--fa.fa-stack-1x{height:1em;width:1.25em}.svg-inline--fa.fa-stack-2x{height:2em;width:2.5em}.fa-inverse{color:#fff}.sr-only{border:0;clip:rect(0,0,0,0);height:1px;margin:-1px;overflow:hidden;padding:0;position:absolute;width:1px}.sr-only-focusable:active,.sr-only-focusable:focus{clip:auto;height:auto;margin:0;overflow:visible;position:static;width:auto}.svg-inline--fa .fa-primary{fill:var(--fa-primary-color,currentColor);opacity:1;opacity:var(--fa-primary-opacity,1)}.svg-inline--fa .fa-secondary{fill:var(--fa-secondary-color,currentColor);opacity:.4;opacity:var(--fa-secondary-opacity,.4)}.svg-inline--fa.fa-swap-opacity .fa-primary{opacity:.4;opacity:var(--fa-secondary-opacity,.4)}.svg-inline--fa.fa-swap-opacity .fa-secondary{opacity:1;opacity:var(--fa-primary-opacity,1)}.svg-inline--fa mask .fa-primary,.svg-inline--fa mask .fa-secondary{fill:#000}.fad.fa-inverse{color:#fff}\";\n\n function css () {\n var dfp = DEFAULT_FAMILY_PREFIX;\n var drc = DEFAULT_REPLACEMENT_CLASS;\n var fp = config.familyPrefix;\n var rc = config.replacementClass;\n var s = baseStyles;\n\n if (fp !== dfp || rc !== drc) {\n var dPatt = new RegExp(\"\\\\.\".concat(dfp, \"\\\\-\"), 'g');\n var customPropPatt = new RegExp(\"\\\\--\".concat(dfp, \"\\\\-\"), 'g');\n var rPatt = new RegExp(\"\\\\.\".concat(drc), 'g');\n s = s.replace(dPatt, \".\".concat(fp, \"-\")).replace(customPropPatt, \"--\".concat(fp, \"-\")).replace(rPatt, \".\".concat(rc));\n }\n\n return s;\n }\n\n var Library =\n /*#__PURE__*/\n function () {\n function Library() {\n _classCallCheck(this, Library);\n\n this.definitions = {};\n }\n\n _createClass(Library, [{\n key: \"add\",\n value: function add() {\n var _this = this;\n\n for (var _len = arguments.length, definitions = new Array(_len), _key = 0; _key < _len; _key++) {\n definitions[_key] = arguments[_key];\n }\n\n var additions = definitions.reduce(this._pullDefinitions, {});\n Object.keys(additions).forEach(function (key) {\n _this.definitions[key] = _objectSpread({}, _this.definitions[key] || {}, additions[key]);\n defineIcons(key, additions[key]);\n build();\n });\n }\n }, {\n key: \"reset\",\n value: function reset() {\n this.definitions = {};\n }\n }, {\n key: \"_pullDefinitions\",\n value: function _pullDefinitions(additions, definition) {\n var normalized = definition.prefix && definition.iconName && definition.icon ? {\n 0: definition\n } : definition;\n Object.keys(normalized).map(function (key) {\n var _normalized$key = normalized[key],\n prefix = _normalized$key.prefix,\n iconName = _normalized$key.iconName,\n icon = _normalized$key.icon;\n if (!additions[prefix]) additions[prefix] = {};\n additions[prefix][iconName] = icon;\n });\n return additions;\n }\n }]);\n\n return Library;\n }();\n\n function ensureCss() {\n if (config.autoAddCss && !_cssInserted) {\n insertCss(css());\n\n _cssInserted = true;\n }\n }\n\n function apiObject(val, abstractCreator) {\n Object.defineProperty(val, 'abstract', {\n get: abstractCreator\n });\n Object.defineProperty(val, 'html', {\n get: function get() {\n return val.abstract.map(function (a) {\n return toHtml(a);\n });\n }\n });\n Object.defineProperty(val, 'node', {\n get: function get() {\n if (!IS_DOM) return;\n var container = DOCUMENT.createElement('div');\n container.innerHTML = val.html;\n return container.children;\n }\n });\n return val;\n }\n\n function findIconDefinition(iconLookup) {\n var _iconLookup$prefix = iconLookup.prefix,\n prefix = _iconLookup$prefix === void 0 ? 'fa' : _iconLookup$prefix,\n iconName = iconLookup.iconName;\n if (!iconName) return;\n return iconFromMapping(library.definitions, prefix, iconName) || iconFromMapping(namespace.styles, prefix, iconName);\n }\n\n function resolveIcons(next) {\n return function (maybeIconDefinition) {\n var params = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n var iconDefinition = (maybeIconDefinition || {}).icon ? maybeIconDefinition : findIconDefinition(maybeIconDefinition || {});\n var mask = params.mask;\n\n if (mask) {\n mask = (mask || {}).icon ? mask : findIconDefinition(mask || {});\n }\n\n return next(iconDefinition, _objectSpread({}, params, {\n mask: mask\n }));\n };\n }\n\n var library = new Library();\n var noAuto = function noAuto() {\n config.autoReplaceSvg = false;\n config.observeMutations = false;\n disconnect();\n };\n var _cssInserted = false;\n var dom = {\n i2svg: function i2svg() {\n var params = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n\n if (IS_DOM) {\n ensureCss();\n var _params$node = params.node,\n node = _params$node === void 0 ? DOCUMENT : _params$node,\n _params$callback = params.callback,\n callback = _params$callback === void 0 ? function () {} : _params$callback;\n\n if (config.searchPseudoElements) {\n searchPseudoElements(node);\n }\n\n return onTree(node, callback);\n } else {\n return picked.reject('Operation requires a DOM of some kind.');\n }\n },\n css: css,\n insertCss: function insertCss$$1() {\n if (!_cssInserted) {\n insertCss(css());\n\n _cssInserted = true;\n }\n },\n watch: function watch() {\n var params = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n var autoReplaceSvgRoot = params.autoReplaceSvgRoot,\n observeMutationsRoot = params.observeMutationsRoot;\n\n if (config.autoReplaceSvg === false) {\n config.autoReplaceSvg = true;\n }\n\n config.observeMutations = true;\n domready(function () {\n autoReplace({\n autoReplaceSvgRoot: autoReplaceSvgRoot\n });\n observe({\n treeCallback: onTree,\n nodeCallback: onNode,\n pseudoElementsCallback: searchPseudoElements,\n observeMutationsRoot: observeMutationsRoot\n });\n });\n }\n };\n var parse = {\n transform: function transform(transformString) {\n return parseTransformString(transformString);\n }\n };\n var icon = resolveIcons(function (iconDefinition) {\n var params = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n var _params$transform = params.transform,\n transform = _params$transform === void 0 ? meaninglessTransform : _params$transform,\n _params$symbol = params.symbol,\n symbol = _params$symbol === void 0 ? false : _params$symbol,\n _params$mask = params.mask,\n mask = _params$mask === void 0 ? null : _params$mask,\n _params$maskId = params.maskId,\n maskId = _params$maskId === void 0 ? null : _params$maskId,\n _params$title = params.title,\n title = _params$title === void 0 ? null : _params$title,\n _params$titleId = params.titleId,\n titleId = _params$titleId === void 0 ? null : _params$titleId,\n _params$classes = params.classes,\n classes = _params$classes === void 0 ? [] : _params$classes,\n _params$attributes = params.attributes,\n attributes = _params$attributes === void 0 ? {} : _params$attributes,\n _params$styles = params.styles,\n styles = _params$styles === void 0 ? {} : _params$styles;\n if (!iconDefinition) return;\n var prefix = iconDefinition.prefix,\n iconName = iconDefinition.iconName,\n icon = iconDefinition.icon;\n return apiObject(_objectSpread({\n type: 'icon'\n }, iconDefinition), function () {\n ensureCss();\n\n if (config.autoA11y) {\n if (title) {\n attributes['aria-labelledby'] = \"\".concat(config.replacementClass, \"-title-\").concat(titleId || nextUniqueId());\n } else {\n attributes['aria-hidden'] = 'true';\n attributes['focusable'] = 'false';\n }\n }\n\n return makeInlineSvgAbstract({\n icons: {\n main: asFoundIcon(icon),\n mask: mask ? asFoundIcon(mask.icon) : {\n found: false,\n width: null,\n height: null,\n icon: {}\n }\n },\n prefix: prefix,\n iconName: iconName,\n transform: _objectSpread({}, meaninglessTransform, transform),\n symbol: symbol,\n title: title,\n maskId: maskId,\n titleId: titleId,\n extra: {\n attributes: attributes,\n styles: styles,\n classes: classes\n }\n });\n });\n });\n var text = function text(content) {\n var params = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n var _params$transform2 = params.transform,\n transform = _params$transform2 === void 0 ? meaninglessTransform : _params$transform2,\n _params$title2 = params.title,\n title = _params$title2 === void 0 ? null : _params$title2,\n _params$classes2 = params.classes,\n classes = _params$classes2 === void 0 ? [] : _params$classes2,\n _params$attributes2 = params.attributes,\n attributes = _params$attributes2 === void 0 ? {} : _params$attributes2,\n _params$styles2 = params.styles,\n styles = _params$styles2 === void 0 ? {} : _params$styles2;\n return apiObject({\n type: 'text',\n content: content\n }, function () {\n ensureCss();\n return makeLayersTextAbstract({\n content: content,\n transform: _objectSpread({}, meaninglessTransform, transform),\n title: title,\n extra: {\n attributes: attributes,\n styles: styles,\n classes: [\"\".concat(config.familyPrefix, \"-layers-text\")].concat(_toConsumableArray(classes))\n }\n });\n });\n };\n var counter = function counter(content) {\n var params = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n var _params$title3 = params.title,\n title = _params$title3 === void 0 ? null : _params$title3,\n _params$classes3 = params.classes,\n classes = _params$classes3 === void 0 ? [] : _params$classes3,\n _params$attributes3 = params.attributes,\n attributes = _params$attributes3 === void 0 ? {} : _params$attributes3,\n _params$styles3 = params.styles,\n styles = _params$styles3 === void 0 ? {} : _params$styles3;\n return apiObject({\n type: 'counter',\n content: content\n }, function () {\n ensureCss();\n return makeLayersCounterAbstract({\n content: content.toString(),\n title: title,\n extra: {\n attributes: attributes,\n styles: styles,\n classes: [\"\".concat(config.familyPrefix, \"-layers-counter\")].concat(_toConsumableArray(classes))\n }\n });\n });\n };\n var layer = function layer(assembler) {\n var params = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n var _params$classes4 = params.classes,\n classes = _params$classes4 === void 0 ? [] : _params$classes4;\n return apiObject({\n type: 'layer'\n }, function () {\n ensureCss();\n var children = [];\n assembler(function (args) {\n Array.isArray(args) ? args.map(function (a) {\n children = children.concat(a.abstract);\n }) : children = children.concat(args.abstract);\n });\n return [{\n tag: 'span',\n attributes: {\n class: [\"\".concat(config.familyPrefix, \"-layers\")].concat(_toConsumableArray(classes)).join(' ')\n },\n children: children\n }];\n });\n };\n var api = {\n noAuto: noAuto,\n config: config,\n dom: dom,\n library: library,\n parse: parse,\n findIconDefinition: findIconDefinition,\n icon: icon,\n text: text,\n counter: counter,\n layer: layer,\n toHtml: toHtml\n };\n\n var autoReplace = function autoReplace() {\n var params = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n var _params$autoReplaceSv = params.autoReplaceSvgRoot,\n autoReplaceSvgRoot = _params$autoReplaceSv === void 0 ? DOCUMENT : _params$autoReplaceSv;\n if ((Object.keys(namespace.styles).length > 0 || config.autoFetchSvg) && IS_DOM && config.autoReplaceSvg) api.dom.i2svg({\n node: autoReplaceSvgRoot\n });\n };\n\n function bootstrap() {\n if (IS_BROWSER) {\n if (!WINDOW.FontAwesome) {\n WINDOW.FontAwesome = api;\n }\n\n domready(function () {\n autoReplace();\n observe({\n treeCallback: onTree,\n nodeCallback: onNode,\n pseudoElementsCallback: searchPseudoElements\n });\n });\n }\n\n namespace.hooks = _objectSpread({}, namespace.hooks, {\n addPack: function addPack(prefix, icons) {\n namespace.styles[prefix] = _objectSpread({}, namespace.styles[prefix] || {}, icons);\n build();\n autoReplace();\n },\n addShims: function addShims(shims) {\n var _namespace$shims;\n\n (_namespace$shims = namespace.shims).push.apply(_namespace$shims, _toConsumableArray(shims));\n\n build();\n autoReplace();\n }\n });\n }\n\n bunker(bootstrap);\n\n}());\n", "// Entry point for the build script in your package.json\nimport \"@hotwired/turbo-rails\"\nimport \"./controllers\"\n\n// FONTAWESOME\nimport \"@fortawesome/fontawesome-free/js/all\";\nFontAwesome.config.mutateApproach = 'sync'\n\n// JQUERY\nimport jquery from \"jquery\"\nwindow.$ = jquery\n\n// Alpine.js\nimport Alpine from 'alpinejs'\nwindow.Alpine = Alpine\nAlpine.start()\n\n// Action text\nimport \"trix\"\nimport \"@rails/actiontext\"\n\n// date-holiday\nimport \"date-holidays\"\n\n// TAILWIND ELEMENTS\nimport 'tw-elements';\n", "var __create = Object.create;\nvar __defProp = Object.defineProperty;\nvar __getProtoOf = Object.getPrototypeOf;\nvar __hasOwnProp = Object.prototype.hasOwnProperty;\nvar __getOwnPropNames = Object.getOwnPropertyNames;\nvar __getOwnPropDesc = Object.getOwnPropertyDescriptor;\nvar __markAsModule = (target) => __defProp(target, \"__esModule\", {value: true});\nvar __commonJS = (callback, module) => () => {\n if (!module) {\n module = {exports: {}};\n callback(module.exports, module);\n }\n return module.exports;\n};\nvar __exportStar = (target, module, desc) => {\n if (module && typeof module === \"object\" || typeof module === \"function\") {\n for (let key of __getOwnPropNames(module))\n if (!__hasOwnProp.call(target, key) && key !== \"default\")\n __defProp(target, key, {get: () => module[key], enumerable: !(desc = __getOwnPropDesc(module, key)) || desc.enumerable});\n }\n return target;\n};\nvar __toModule = (module) => {\n return __exportStar(__markAsModule(__defProp(module != null ? __create(__getProtoOf(module)) : {}, \"default\", module && module.__esModule && \"default\" in module ? {get: () => module.default, enumerable: true} : {value: module, enumerable: true})), module);\n};\n\n// node_modules/@vue/shared/dist/shared.cjs.js\nvar require_shared_cjs = __commonJS((exports) => {\n \"use strict\";\n Object.defineProperty(exports, \"__esModule\", {value: true});\n function makeMap(str, expectsLowerCase) {\n const map = Object.create(null);\n const list = str.split(\",\");\n for (let i = 0; i < list.length; i++) {\n map[list[i]] = true;\n }\n return expectsLowerCase ? (val) => !!map[val.toLowerCase()] : (val) => !!map[val];\n }\n var PatchFlagNames = {\n [1]: `TEXT`,\n [2]: `CLASS`,\n [4]: `STYLE`,\n [8]: `PROPS`,\n [16]: `FULL_PROPS`,\n [32]: `HYDRATE_EVENTS`,\n [64]: `STABLE_FRAGMENT`,\n [128]: `KEYED_FRAGMENT`,\n [256]: `UNKEYED_FRAGMENT`,\n [512]: `NEED_PATCH`,\n [1024]: `DYNAMIC_SLOTS`,\n [2048]: `DEV_ROOT_FRAGMENT`,\n [-1]: `HOISTED`,\n [-2]: `BAIL`\n };\n var slotFlagsText = {\n [1]: \"STABLE\",\n [2]: \"DYNAMIC\",\n [3]: \"FORWARDED\"\n };\n var GLOBALS_WHITE_LISTED = \"Infinity,undefined,NaN,isFinite,isNaN,parseFloat,parseInt,decodeURI,decodeURIComponent,encodeURI,encodeURIComponent,Math,Number,Date,Array,Object,Boolean,String,RegExp,Map,Set,JSON,Intl,BigInt\";\n var isGloballyWhitelisted = /* @__PURE__ */ makeMap(GLOBALS_WHITE_LISTED);\n var range = 2;\n function generateCodeFrame(source, start2 = 0, end = source.length) {\n const lines = source.split(/\\r?\\n/);\n let count = 0;\n const res = [];\n for (let i = 0; i < lines.length; i++) {\n count += lines[i].length + 1;\n if (count >= start2) {\n for (let j = i - range; j <= i + range || end > count; j++) {\n if (j < 0 || j >= lines.length)\n continue;\n const line = j + 1;\n res.push(`${line}${\" \".repeat(Math.max(3 - String(line).length, 0))}| ${lines[j]}`);\n const lineLength = lines[j].length;\n if (j === i) {\n const pad = start2 - (count - lineLength) + 1;\n const length = Math.max(1, end > count ? lineLength - pad : end - start2);\n res.push(` | ` + \" \".repeat(pad) + \"^\".repeat(length));\n } else if (j > i) {\n if (end > count) {\n const length = Math.max(Math.min(end - count, lineLength), 1);\n res.push(` | ` + \"^\".repeat(length));\n }\n count += lineLength + 1;\n }\n }\n break;\n }\n }\n return res.join(\"\\n\");\n }\n var specialBooleanAttrs = `itemscope,allowfullscreen,formnovalidate,ismap,nomodule,novalidate,readonly`;\n var isSpecialBooleanAttr = /* @__PURE__ */ makeMap(specialBooleanAttrs);\n var isBooleanAttr2 = /* @__PURE__ */ makeMap(specialBooleanAttrs + `,async,autofocus,autoplay,controls,default,defer,disabled,hidden,loop,open,required,reversed,scoped,seamless,checked,muted,multiple,selected`);\n var unsafeAttrCharRE = /[>/=\"'\\u0009\\u000a\\u000c\\u0020]/;\n var attrValidationCache = {};\n function isSSRSafeAttrName(name) {\n if (attrValidationCache.hasOwnProperty(name)) {\n return attrValidationCache[name];\n }\n const isUnsafe = unsafeAttrCharRE.test(name);\n if (isUnsafe) {\n console.error(`unsafe attribute name: ${name}`);\n }\n return attrValidationCache[name] = !isUnsafe;\n }\n var propsToAttrMap = {\n acceptCharset: \"accept-charset\",\n className: \"class\",\n htmlFor: \"for\",\n httpEquiv: \"http-equiv\"\n };\n var isNoUnitNumericStyleProp = /* @__PURE__ */ makeMap(`animation-iteration-count,border-image-outset,border-image-slice,border-image-width,box-flex,box-flex-group,box-ordinal-group,column-count,columns,flex,flex-grow,flex-positive,flex-shrink,flex-negative,flex-order,grid-row,grid-row-end,grid-row-span,grid-row-start,grid-column,grid-column-end,grid-column-span,grid-column-start,font-weight,line-clamp,line-height,opacity,order,orphans,tab-size,widows,z-index,zoom,fill-opacity,flood-opacity,stop-opacity,stroke-dasharray,stroke-dashoffset,stroke-miterlimit,stroke-opacity,stroke-width`);\n var isKnownAttr = /* @__PURE__ */ makeMap(`accept,accept-charset,accesskey,action,align,allow,alt,async,autocapitalize,autocomplete,autofocus,autoplay,background,bgcolor,border,buffered,capture,challenge,charset,checked,cite,class,code,codebase,color,cols,colspan,content,contenteditable,contextmenu,controls,coords,crossorigin,csp,data,datetime,decoding,default,defer,dir,dirname,disabled,download,draggable,dropzone,enctype,enterkeyhint,for,form,formaction,formenctype,formmethod,formnovalidate,formtarget,headers,height,hidden,high,href,hreflang,http-equiv,icon,id,importance,integrity,ismap,itemprop,keytype,kind,label,lang,language,loading,list,loop,low,manifest,max,maxlength,minlength,media,min,multiple,muted,name,novalidate,open,optimum,pattern,ping,placeholder,poster,preload,radiogroup,readonly,referrerpolicy,rel,required,reversed,rows,rowspan,sandbox,scope,scoped,selected,shape,size,sizes,slot,span,spellcheck,src,srcdoc,srclang,srcset,start,step,style,summary,tabindex,target,title,translate,type,usemap,value,width,wrap`);\n function normalizeStyle(value) {\n if (isArray(value)) {\n const res = {};\n for (let i = 0; i < value.length; i++) {\n const item = value[i];\n const normalized = normalizeStyle(isString(item) ? parseStringStyle(item) : item);\n if (normalized) {\n for (const key in normalized) {\n res[key] = normalized[key];\n }\n }\n }\n return res;\n } else if (isObject(value)) {\n return value;\n }\n }\n var listDelimiterRE = /;(?![^(]*\\))/g;\n var propertyDelimiterRE = /:(.+)/;\n function parseStringStyle(cssText) {\n const ret = {};\n cssText.split(listDelimiterRE).forEach((item) => {\n if (item) {\n const tmp = item.split(propertyDelimiterRE);\n tmp.length > 1 && (ret[tmp[0].trim()] = tmp[1].trim());\n }\n });\n return ret;\n }\n function stringifyStyle(styles) {\n let ret = \"\";\n if (!styles) {\n return ret;\n }\n for (const key in styles) {\n const value = styles[key];\n const normalizedKey = key.startsWith(`--`) ? key : hyphenate(key);\n if (isString(value) || typeof value === \"number\" && isNoUnitNumericStyleProp(normalizedKey)) {\n ret += `${normalizedKey}:${value};`;\n }\n }\n return ret;\n }\n function normalizeClass(value) {\n let res = \"\";\n if (isString(value)) {\n res = value;\n } else if (isArray(value)) {\n for (let i = 0; i < value.length; i++) {\n const normalized = normalizeClass(value[i]);\n if (normalized) {\n res += normalized + \" \";\n }\n }\n } else if (isObject(value)) {\n for (const name in value) {\n if (value[name]) {\n res += name + \" \";\n }\n }\n }\n return res.trim();\n }\n var HTML_TAGS = \"html,body,base,head,link,meta,style,title,address,article,aside,footer,header,h1,h2,h3,h4,h5,h6,hgroup,nav,section,div,dd,dl,dt,figcaption,figure,picture,hr,img,li,main,ol,p,pre,ul,a,b,abbr,bdi,bdo,br,cite,code,data,dfn,em,i,kbd,mark,q,rp,rt,rtc,ruby,s,samp,small,span,strong,sub,sup,time,u,var,wbr,area,audio,map,track,video,embed,object,param,source,canvas,script,noscript,del,ins,caption,col,colgroup,table,thead,tbody,td,th,tr,button,datalist,fieldset,form,input,label,legend,meter,optgroup,option,output,progress,select,textarea,details,dialog,menu,summary,template,blockquote,iframe,tfoot\";\n var SVG_TAGS = \"svg,animate,animateMotion,animateTransform,circle,clipPath,color-profile,defs,desc,discard,ellipse,feBlend,feColorMatrix,feComponentTransfer,feComposite,feConvolveMatrix,feDiffuseLighting,feDisplacementMap,feDistanceLight,feDropShadow,feFlood,feFuncA,feFuncB,feFuncG,feFuncR,feGaussianBlur,feImage,feMerge,feMergeNode,feMorphology,feOffset,fePointLight,feSpecularLighting,feSpotLight,feTile,feTurbulence,filter,foreignObject,g,hatch,hatchpath,image,line,linearGradient,marker,mask,mesh,meshgradient,meshpatch,meshrow,metadata,mpath,path,pattern,polygon,polyline,radialGradient,rect,set,solidcolor,stop,switch,symbol,text,textPath,title,tspan,unknown,use,view\";\n var VOID_TAGS = \"area,base,br,col,embed,hr,img,input,link,meta,param,source,track,wbr\";\n var isHTMLTag = /* @__PURE__ */ makeMap(HTML_TAGS);\n var isSVGTag = /* @__PURE__ */ makeMap(SVG_TAGS);\n var isVoidTag = /* @__PURE__ */ makeMap(VOID_TAGS);\n var escapeRE = /[\"'&<>]/;\n function escapeHtml(string) {\n const str = \"\" + string;\n const match = escapeRE.exec(str);\n if (!match) {\n return str;\n }\n let html = \"\";\n let escaped;\n let index;\n let lastIndex = 0;\n for (index = match.index; index < str.length; index++) {\n switch (str.charCodeAt(index)) {\n case 34:\n escaped = \""\";\n break;\n case 38:\n escaped = \"&\";\n break;\n case 39:\n escaped = \"'\";\n break;\n case 60:\n escaped = \"<\";\n break;\n case 62:\n escaped = \">\";\n break;\n default:\n continue;\n }\n if (lastIndex !== index) {\n html += str.substring(lastIndex, index);\n }\n lastIndex = index + 1;\n html += escaped;\n }\n return lastIndex !== index ? html + str.substring(lastIndex, index) : html;\n }\n var commentStripRE = /^-?>||--!>| looseEqual(item, val));\n }\n var toDisplayString = (val) => {\n return val == null ? \"\" : isObject(val) ? JSON.stringify(val, replacer, 2) : String(val);\n };\n var replacer = (_key, val) => {\n if (isMap(val)) {\n return {\n [`Map(${val.size})`]: [...val.entries()].reduce((entries, [key, val2]) => {\n entries[`${key} =>`] = val2;\n return entries;\n }, {})\n };\n } else if (isSet(val)) {\n return {\n [`Set(${val.size})`]: [...val.values()]\n };\n } else if (isObject(val) && !isArray(val) && !isPlainObject(val)) {\n return String(val);\n }\n return val;\n };\n var babelParserDefaultPlugins = [\n \"bigInt\",\n \"optionalChaining\",\n \"nullishCoalescingOperator\"\n ];\n var EMPTY_OBJ = Object.freeze({});\n var EMPTY_ARR = Object.freeze([]);\n var NOOP = () => {\n };\n var NO = () => false;\n var onRE = /^on[^a-z]/;\n var isOn = (key) => onRE.test(key);\n var isModelListener = (key) => key.startsWith(\"onUpdate:\");\n var extend = Object.assign;\n var remove = (arr, el) => {\n const i = arr.indexOf(el);\n if (i > -1) {\n arr.splice(i, 1);\n }\n };\n var hasOwnProperty = Object.prototype.hasOwnProperty;\n var hasOwn = (val, key) => hasOwnProperty.call(val, key);\n var isArray = Array.isArray;\n var isMap = (val) => toTypeString(val) === \"[object Map]\";\n var isSet = (val) => toTypeString(val) === \"[object Set]\";\n var isDate = (val) => val instanceof Date;\n var isFunction = (val) => typeof val === \"function\";\n var isString = (val) => typeof val === \"string\";\n var isSymbol = (val) => typeof val === \"symbol\";\n var isObject = (val) => val !== null && typeof val === \"object\";\n var isPromise = (val) => {\n return isObject(val) && isFunction(val.then) && isFunction(val.catch);\n };\n var objectToString = Object.prototype.toString;\n var toTypeString = (value) => objectToString.call(value);\n var toRawType = (value) => {\n return toTypeString(value).slice(8, -1);\n };\n var isPlainObject = (val) => toTypeString(val) === \"[object Object]\";\n var isIntegerKey = (key) => isString(key) && key !== \"NaN\" && key[0] !== \"-\" && \"\" + parseInt(key, 10) === key;\n var isReservedProp = /* @__PURE__ */ makeMap(\",key,ref,onVnodeBeforeMount,onVnodeMounted,onVnodeBeforeUpdate,onVnodeUpdated,onVnodeBeforeUnmount,onVnodeUnmounted\");\n var cacheStringFunction = (fn) => {\n const cache = Object.create(null);\n return (str) => {\n const hit = cache[str];\n return hit || (cache[str] = fn(str));\n };\n };\n var camelizeRE = /-(\\w)/g;\n var camelize = cacheStringFunction((str) => {\n return str.replace(camelizeRE, (_, c) => c ? c.toUpperCase() : \"\");\n });\n var hyphenateRE = /\\B([A-Z])/g;\n var hyphenate = cacheStringFunction((str) => str.replace(hyphenateRE, \"-$1\").toLowerCase());\n var capitalize = cacheStringFunction((str) => str.charAt(0).toUpperCase() + str.slice(1));\n var toHandlerKey = cacheStringFunction((str) => str ? `on${capitalize(str)}` : ``);\n var hasChanged = (value, oldValue) => value !== oldValue && (value === value || oldValue === oldValue);\n var invokeArrayFns = (fns, arg) => {\n for (let i = 0; i < fns.length; i++) {\n fns[i](arg);\n }\n };\n var def = (obj, key, value) => {\n Object.defineProperty(obj, key, {\n configurable: true,\n enumerable: false,\n value\n });\n };\n var toNumber = (val) => {\n const n = parseFloat(val);\n return isNaN(n) ? val : n;\n };\n var _globalThis;\n var getGlobalThis = () => {\n return _globalThis || (_globalThis = typeof globalThis !== \"undefined\" ? globalThis : typeof self !== \"undefined\" ? self : typeof window !== \"undefined\" ? window : typeof global !== \"undefined\" ? global : {});\n };\n exports.EMPTY_ARR = EMPTY_ARR;\n exports.EMPTY_OBJ = EMPTY_OBJ;\n exports.NO = NO;\n exports.NOOP = NOOP;\n exports.PatchFlagNames = PatchFlagNames;\n exports.babelParserDefaultPlugins = babelParserDefaultPlugins;\n exports.camelize = camelize;\n exports.capitalize = capitalize;\n exports.def = def;\n exports.escapeHtml = escapeHtml;\n exports.escapeHtmlComment = escapeHtmlComment;\n exports.extend = extend;\n exports.generateCodeFrame = generateCodeFrame;\n exports.getGlobalThis = getGlobalThis;\n exports.hasChanged = hasChanged;\n exports.hasOwn = hasOwn;\n exports.hyphenate = hyphenate;\n exports.invokeArrayFns = invokeArrayFns;\n exports.isArray = isArray;\n exports.isBooleanAttr = isBooleanAttr2;\n exports.isDate = isDate;\n exports.isFunction = isFunction;\n exports.isGloballyWhitelisted = isGloballyWhitelisted;\n exports.isHTMLTag = isHTMLTag;\n exports.isIntegerKey = isIntegerKey;\n exports.isKnownAttr = isKnownAttr;\n exports.isMap = isMap;\n exports.isModelListener = isModelListener;\n exports.isNoUnitNumericStyleProp = isNoUnitNumericStyleProp;\n exports.isObject = isObject;\n exports.isOn = isOn;\n exports.isPlainObject = isPlainObject;\n exports.isPromise = isPromise;\n exports.isReservedProp = isReservedProp;\n exports.isSSRSafeAttrName = isSSRSafeAttrName;\n exports.isSVGTag = isSVGTag;\n exports.isSet = isSet;\n exports.isSpecialBooleanAttr = isSpecialBooleanAttr;\n exports.isString = isString;\n exports.isSymbol = isSymbol;\n exports.isVoidTag = isVoidTag;\n exports.looseEqual = looseEqual;\n exports.looseIndexOf = looseIndexOf;\n exports.makeMap = makeMap;\n exports.normalizeClass = normalizeClass;\n exports.normalizeStyle = normalizeStyle;\n exports.objectToString = objectToString;\n exports.parseStringStyle = parseStringStyle;\n exports.propsToAttrMap = propsToAttrMap;\n exports.remove = remove;\n exports.slotFlagsText = slotFlagsText;\n exports.stringifyStyle = stringifyStyle;\n exports.toDisplayString = toDisplayString;\n exports.toHandlerKey = toHandlerKey;\n exports.toNumber = toNumber;\n exports.toRawType = toRawType;\n exports.toTypeString = toTypeString;\n});\n\n// node_modules/@vue/shared/index.js\nvar require_shared = __commonJS((exports, module) => {\n \"use strict\";\n if (false) {\n module.exports = null;\n } else {\n module.exports = require_shared_cjs();\n }\n});\n\n// node_modules/@vue/reactivity/dist/reactivity.cjs.js\nvar require_reactivity_cjs = __commonJS((exports) => {\n \"use strict\";\n Object.defineProperty(exports, \"__esModule\", {value: true});\n var shared = require_shared();\n var targetMap = new WeakMap();\n var effectStack = [];\n var activeEffect;\n var ITERATE_KEY = Symbol(\"iterate\");\n var MAP_KEY_ITERATE_KEY = Symbol(\"Map key iterate\");\n function isEffect(fn) {\n return fn && fn._isEffect === true;\n }\n function effect3(fn, options = shared.EMPTY_OBJ) {\n if (isEffect(fn)) {\n fn = fn.raw;\n }\n const effect4 = createReactiveEffect(fn, options);\n if (!options.lazy) {\n effect4();\n }\n return effect4;\n }\n function stop2(effect4) {\n if (effect4.active) {\n cleanup(effect4);\n if (effect4.options.onStop) {\n effect4.options.onStop();\n }\n effect4.active = false;\n }\n }\n var uid = 0;\n function createReactiveEffect(fn, options) {\n const effect4 = function reactiveEffect() {\n if (!effect4.active) {\n return fn();\n }\n if (!effectStack.includes(effect4)) {\n cleanup(effect4);\n try {\n enableTracking();\n effectStack.push(effect4);\n activeEffect = effect4;\n return fn();\n } finally {\n effectStack.pop();\n resetTracking();\n activeEffect = effectStack[effectStack.length - 1];\n }\n }\n };\n effect4.id = uid++;\n effect4.allowRecurse = !!options.allowRecurse;\n effect4._isEffect = true;\n effect4.active = true;\n effect4.raw = fn;\n effect4.deps = [];\n effect4.options = options;\n return effect4;\n }\n function cleanup(effect4) {\n const {deps} = effect4;\n if (deps.length) {\n for (let i = 0; i < deps.length; i++) {\n deps[i].delete(effect4);\n }\n deps.length = 0;\n }\n }\n var shouldTrack = true;\n var trackStack = [];\n function pauseTracking() {\n trackStack.push(shouldTrack);\n shouldTrack = false;\n }\n function enableTracking() {\n trackStack.push(shouldTrack);\n shouldTrack = true;\n }\n function resetTracking() {\n const last = trackStack.pop();\n shouldTrack = last === void 0 ? true : last;\n }\n function track(target, type, key) {\n if (!shouldTrack || activeEffect === void 0) {\n return;\n }\n let depsMap = targetMap.get(target);\n if (!depsMap) {\n targetMap.set(target, depsMap = new Map());\n }\n let dep = depsMap.get(key);\n if (!dep) {\n depsMap.set(key, dep = new Set());\n }\n if (!dep.has(activeEffect)) {\n dep.add(activeEffect);\n activeEffect.deps.push(dep);\n if (activeEffect.options.onTrack) {\n activeEffect.options.onTrack({\n effect: activeEffect,\n target,\n type,\n key\n });\n }\n }\n }\n function trigger(target, type, key, newValue, oldValue, oldTarget) {\n const depsMap = targetMap.get(target);\n if (!depsMap) {\n return;\n }\n const effects = new Set();\n const add2 = (effectsToAdd) => {\n if (effectsToAdd) {\n effectsToAdd.forEach((effect4) => {\n if (effect4 !== activeEffect || effect4.allowRecurse) {\n effects.add(effect4);\n }\n });\n }\n };\n if (type === \"clear\") {\n depsMap.forEach(add2);\n } else if (key === \"length\" && shared.isArray(target)) {\n depsMap.forEach((dep, key2) => {\n if (key2 === \"length\" || key2 >= newValue) {\n add2(dep);\n }\n });\n } else {\n if (key !== void 0) {\n add2(depsMap.get(key));\n }\n switch (type) {\n case \"add\":\n if (!shared.isArray(target)) {\n add2(depsMap.get(ITERATE_KEY));\n if (shared.isMap(target)) {\n add2(depsMap.get(MAP_KEY_ITERATE_KEY));\n }\n } else if (shared.isIntegerKey(key)) {\n add2(depsMap.get(\"length\"));\n }\n break;\n case \"delete\":\n if (!shared.isArray(target)) {\n add2(depsMap.get(ITERATE_KEY));\n if (shared.isMap(target)) {\n add2(depsMap.get(MAP_KEY_ITERATE_KEY));\n }\n }\n break;\n case \"set\":\n if (shared.isMap(target)) {\n add2(depsMap.get(ITERATE_KEY));\n }\n break;\n }\n }\n const run = (effect4) => {\n if (effect4.options.onTrigger) {\n effect4.options.onTrigger({\n effect: effect4,\n target,\n key,\n type,\n newValue,\n oldValue,\n oldTarget\n });\n }\n if (effect4.options.scheduler) {\n effect4.options.scheduler(effect4);\n } else {\n effect4();\n }\n };\n effects.forEach(run);\n }\n var isNonTrackableKeys = /* @__PURE__ */ shared.makeMap(`__proto__,__v_isRef,__isVue`);\n var builtInSymbols = new Set(Object.getOwnPropertyNames(Symbol).map((key) => Symbol[key]).filter(shared.isSymbol));\n var get2 = /* @__PURE__ */ createGetter();\n var shallowGet = /* @__PURE__ */ createGetter(false, true);\n var readonlyGet = /* @__PURE__ */ createGetter(true);\n var shallowReadonlyGet = /* @__PURE__ */ createGetter(true, true);\n var arrayInstrumentations = {};\n [\"includes\", \"indexOf\", \"lastIndexOf\"].forEach((key) => {\n const method = Array.prototype[key];\n arrayInstrumentations[key] = function(...args) {\n const arr = toRaw2(this);\n for (let i = 0, l = this.length; i < l; i++) {\n track(arr, \"get\", i + \"\");\n }\n const res = method.apply(arr, args);\n if (res === -1 || res === false) {\n return method.apply(arr, args.map(toRaw2));\n } else {\n return res;\n }\n };\n });\n [\"push\", \"pop\", \"shift\", \"unshift\", \"splice\"].forEach((key) => {\n const method = Array.prototype[key];\n arrayInstrumentations[key] = function(...args) {\n pauseTracking();\n const res = method.apply(this, args);\n resetTracking();\n return res;\n };\n });\n function createGetter(isReadonly2 = false, shallow = false) {\n return function get3(target, key, receiver) {\n if (key === \"__v_isReactive\") {\n return !isReadonly2;\n } else if (key === \"__v_isReadonly\") {\n return isReadonly2;\n } else if (key === \"__v_raw\" && receiver === (isReadonly2 ? shallow ? shallowReadonlyMap : readonlyMap : shallow ? shallowReactiveMap : reactiveMap).get(target)) {\n return target;\n }\n const targetIsArray = shared.isArray(target);\n if (!isReadonly2 && targetIsArray && shared.hasOwn(arrayInstrumentations, key)) {\n return Reflect.get(arrayInstrumentations, key, receiver);\n }\n const res = Reflect.get(target, key, receiver);\n if (shared.isSymbol(key) ? builtInSymbols.has(key) : isNonTrackableKeys(key)) {\n return res;\n }\n if (!isReadonly2) {\n track(target, \"get\", key);\n }\n if (shallow) {\n return res;\n }\n if (isRef(res)) {\n const shouldUnwrap = !targetIsArray || !shared.isIntegerKey(key);\n return shouldUnwrap ? res.value : res;\n }\n if (shared.isObject(res)) {\n return isReadonly2 ? readonly(res) : reactive3(res);\n }\n return res;\n };\n }\n var set2 = /* @__PURE__ */ createSetter();\n var shallowSet = /* @__PURE__ */ createSetter(true);\n function createSetter(shallow = false) {\n return function set3(target, key, value, receiver) {\n let oldValue = target[key];\n if (!shallow) {\n value = toRaw2(value);\n oldValue = toRaw2(oldValue);\n if (!shared.isArray(target) && isRef(oldValue) && !isRef(value)) {\n oldValue.value = value;\n return true;\n }\n }\n const hadKey = shared.isArray(target) && shared.isIntegerKey(key) ? Number(key) < target.length : shared.hasOwn(target, key);\n const result = Reflect.set(target, key, value, receiver);\n if (target === toRaw2(receiver)) {\n if (!hadKey) {\n trigger(target, \"add\", key, value);\n } else if (shared.hasChanged(value, oldValue)) {\n trigger(target, \"set\", key, value, oldValue);\n }\n }\n return result;\n };\n }\n function deleteProperty(target, key) {\n const hadKey = shared.hasOwn(target, key);\n const oldValue = target[key];\n const result = Reflect.deleteProperty(target, key);\n if (result && hadKey) {\n trigger(target, \"delete\", key, void 0, oldValue);\n }\n return result;\n }\n function has(target, key) {\n const result = Reflect.has(target, key);\n if (!shared.isSymbol(key) || !builtInSymbols.has(key)) {\n track(target, \"has\", key);\n }\n return result;\n }\n function ownKeys(target) {\n track(target, \"iterate\", shared.isArray(target) ? \"length\" : ITERATE_KEY);\n return Reflect.ownKeys(target);\n }\n var mutableHandlers = {\n get: get2,\n set: set2,\n deleteProperty,\n has,\n ownKeys\n };\n var readonlyHandlers = {\n get: readonlyGet,\n set(target, key) {\n {\n console.warn(`Set operation on key \"${String(key)}\" failed: target is readonly.`, target);\n }\n return true;\n },\n deleteProperty(target, key) {\n {\n console.warn(`Delete operation on key \"${String(key)}\" failed: target is readonly.`, target);\n }\n return true;\n }\n };\n var shallowReactiveHandlers = shared.extend({}, mutableHandlers, {\n get: shallowGet,\n set: shallowSet\n });\n var shallowReadonlyHandlers = shared.extend({}, readonlyHandlers, {\n get: shallowReadonlyGet\n });\n var toReactive = (value) => shared.isObject(value) ? reactive3(value) : value;\n var toReadonly = (value) => shared.isObject(value) ? readonly(value) : value;\n var toShallow = (value) => value;\n var getProto = (v) => Reflect.getPrototypeOf(v);\n function get$1(target, key, isReadonly2 = false, isShallow = false) {\n target = target[\"__v_raw\"];\n const rawTarget = toRaw2(target);\n const rawKey = toRaw2(key);\n if (key !== rawKey) {\n !isReadonly2 && track(rawTarget, \"get\", key);\n }\n !isReadonly2 && track(rawTarget, \"get\", rawKey);\n const {has: has2} = getProto(rawTarget);\n const wrap = isShallow ? toShallow : isReadonly2 ? toReadonly : toReactive;\n if (has2.call(rawTarget, key)) {\n return wrap(target.get(key));\n } else if (has2.call(rawTarget, rawKey)) {\n return wrap(target.get(rawKey));\n } else if (target !== rawTarget) {\n target.get(key);\n }\n }\n function has$1(key, isReadonly2 = false) {\n const target = this[\"__v_raw\"];\n const rawTarget = toRaw2(target);\n const rawKey = toRaw2(key);\n if (key !== rawKey) {\n !isReadonly2 && track(rawTarget, \"has\", key);\n }\n !isReadonly2 && track(rawTarget, \"has\", rawKey);\n return key === rawKey ? target.has(key) : target.has(key) || target.has(rawKey);\n }\n function size(target, isReadonly2 = false) {\n target = target[\"__v_raw\"];\n !isReadonly2 && track(toRaw2(target), \"iterate\", ITERATE_KEY);\n return Reflect.get(target, \"size\", target);\n }\n function add(value) {\n value = toRaw2(value);\n const target = toRaw2(this);\n const proto = getProto(target);\n const hadKey = proto.has.call(target, value);\n if (!hadKey) {\n target.add(value);\n trigger(target, \"add\", value, value);\n }\n return this;\n }\n function set$1(key, value) {\n value = toRaw2(value);\n const target = toRaw2(this);\n const {has: has2, get: get3} = getProto(target);\n let hadKey = has2.call(target, key);\n if (!hadKey) {\n key = toRaw2(key);\n hadKey = has2.call(target, key);\n } else {\n checkIdentityKeys(target, has2, key);\n }\n const oldValue = get3.call(target, key);\n target.set(key, value);\n if (!hadKey) {\n trigger(target, \"add\", key, value);\n } else if (shared.hasChanged(value, oldValue)) {\n trigger(target, \"set\", key, value, oldValue);\n }\n return this;\n }\n function deleteEntry(key) {\n const target = toRaw2(this);\n const {has: has2, get: get3} = getProto(target);\n let hadKey = has2.call(target, key);\n if (!hadKey) {\n key = toRaw2(key);\n hadKey = has2.call(target, key);\n } else {\n checkIdentityKeys(target, has2, key);\n }\n const oldValue = get3 ? get3.call(target, key) : void 0;\n const result = target.delete(key);\n if (hadKey) {\n trigger(target, \"delete\", key, void 0, oldValue);\n }\n return result;\n }\n function clear() {\n const target = toRaw2(this);\n const hadItems = target.size !== 0;\n const oldTarget = shared.isMap(target) ? new Map(target) : new Set(target);\n const result = target.clear();\n if (hadItems) {\n trigger(target, \"clear\", void 0, void 0, oldTarget);\n }\n return result;\n }\n function createForEach(isReadonly2, isShallow) {\n return function forEach(callback, thisArg) {\n const observed = this;\n const target = observed[\"__v_raw\"];\n const rawTarget = toRaw2(target);\n const wrap = isShallow ? toShallow : isReadonly2 ? toReadonly : toReactive;\n !isReadonly2 && track(rawTarget, \"iterate\", ITERATE_KEY);\n return target.forEach((value, key) => {\n return callback.call(thisArg, wrap(value), wrap(key), observed);\n });\n };\n }\n function createIterableMethod(method, isReadonly2, isShallow) {\n return function(...args) {\n const target = this[\"__v_raw\"];\n const rawTarget = toRaw2(target);\n const targetIsMap = shared.isMap(rawTarget);\n const isPair = method === \"entries\" || method === Symbol.iterator && targetIsMap;\n const isKeyOnly = method === \"keys\" && targetIsMap;\n const innerIterator = target[method](...args);\n const wrap = isShallow ? toShallow : isReadonly2 ? toReadonly : toReactive;\n !isReadonly2 && track(rawTarget, \"iterate\", isKeyOnly ? MAP_KEY_ITERATE_KEY : ITERATE_KEY);\n return {\n next() {\n const {value, done} = innerIterator.next();\n return done ? {value, done} : {\n value: isPair ? [wrap(value[0]), wrap(value[1])] : wrap(value),\n done\n };\n },\n [Symbol.iterator]() {\n return this;\n }\n };\n };\n }\n function createReadonlyMethod(type) {\n return function(...args) {\n {\n const key = args[0] ? `on key \"${args[0]}\" ` : ``;\n console.warn(`${shared.capitalize(type)} operation ${key}failed: target is readonly.`, toRaw2(this));\n }\n return type === \"delete\" ? false : this;\n };\n }\n var mutableInstrumentations = {\n get(key) {\n return get$1(this, key);\n },\n get size() {\n return size(this);\n },\n has: has$1,\n add,\n set: set$1,\n delete: deleteEntry,\n clear,\n forEach: createForEach(false, false)\n };\n var shallowInstrumentations = {\n get(key) {\n return get$1(this, key, false, true);\n },\n get size() {\n return size(this);\n },\n has: has$1,\n add,\n set: set$1,\n delete: deleteEntry,\n clear,\n forEach: createForEach(false, true)\n };\n var readonlyInstrumentations = {\n get(key) {\n return get$1(this, key, true);\n },\n get size() {\n return size(this, true);\n },\n has(key) {\n return has$1.call(this, key, true);\n },\n add: createReadonlyMethod(\"add\"),\n set: createReadonlyMethod(\"set\"),\n delete: createReadonlyMethod(\"delete\"),\n clear: createReadonlyMethod(\"clear\"),\n forEach: createForEach(true, false)\n };\n var shallowReadonlyInstrumentations = {\n get(key) {\n return get$1(this, key, true, true);\n },\n get size() {\n return size(this, true);\n },\n has(key) {\n return has$1.call(this, key, true);\n },\n add: createReadonlyMethod(\"add\"),\n set: createReadonlyMethod(\"set\"),\n delete: createReadonlyMethod(\"delete\"),\n clear: createReadonlyMethod(\"clear\"),\n forEach: createForEach(true, true)\n };\n var iteratorMethods = [\"keys\", \"values\", \"entries\", Symbol.iterator];\n iteratorMethods.forEach((method) => {\n mutableInstrumentations[method] = createIterableMethod(method, false, false);\n readonlyInstrumentations[method] = createIterableMethod(method, true, false);\n shallowInstrumentations[method] = createIterableMethod(method, false, true);\n shallowReadonlyInstrumentations[method] = createIterableMethod(method, true, true);\n });\n function createInstrumentationGetter(isReadonly2, shallow) {\n const instrumentations = shallow ? isReadonly2 ? shallowReadonlyInstrumentations : shallowInstrumentations : isReadonly2 ? readonlyInstrumentations : mutableInstrumentations;\n return (target, key, receiver) => {\n if (key === \"__v_isReactive\") {\n return !isReadonly2;\n } else if (key === \"__v_isReadonly\") {\n return isReadonly2;\n } else if (key === \"__v_raw\") {\n return target;\n }\n return Reflect.get(shared.hasOwn(instrumentations, key) && key in target ? instrumentations : target, key, receiver);\n };\n }\n var mutableCollectionHandlers = {\n get: createInstrumentationGetter(false, false)\n };\n var shallowCollectionHandlers = {\n get: createInstrumentationGetter(false, true)\n };\n var readonlyCollectionHandlers = {\n get: createInstrumentationGetter(true, false)\n };\n var shallowReadonlyCollectionHandlers = {\n get: createInstrumentationGetter(true, true)\n };\n function checkIdentityKeys(target, has2, key) {\n const rawKey = toRaw2(key);\n if (rawKey !== key && has2.call(target, rawKey)) {\n const type = shared.toRawType(target);\n console.warn(`Reactive ${type} contains both the raw and reactive versions of the same object${type === `Map` ? ` as keys` : ``}, which can lead to inconsistencies. Avoid differentiating between the raw and reactive versions of an object and only use the reactive version if possible.`);\n }\n }\n var reactiveMap = new WeakMap();\n var shallowReactiveMap = new WeakMap();\n var readonlyMap = new WeakMap();\n var shallowReadonlyMap = new WeakMap();\n function targetTypeMap(rawType) {\n switch (rawType) {\n case \"Object\":\n case \"Array\":\n return 1;\n case \"Map\":\n case \"Set\":\n case \"WeakMap\":\n case \"WeakSet\":\n return 2;\n default:\n return 0;\n }\n }\n function getTargetType(value) {\n return value[\"__v_skip\"] || !Object.isExtensible(value) ? 0 : targetTypeMap(shared.toRawType(value));\n }\n function reactive3(target) {\n if (target && target[\"__v_isReadonly\"]) {\n return target;\n }\n return createReactiveObject(target, false, mutableHandlers, mutableCollectionHandlers, reactiveMap);\n }\n function shallowReactive(target) {\n return createReactiveObject(target, false, shallowReactiveHandlers, shallowCollectionHandlers, shallowReactiveMap);\n }\n function readonly(target) {\n return createReactiveObject(target, true, readonlyHandlers, readonlyCollectionHandlers, readonlyMap);\n }\n function shallowReadonly(target) {\n return createReactiveObject(target, true, shallowReadonlyHandlers, shallowReadonlyCollectionHandlers, shallowReadonlyMap);\n }\n function createReactiveObject(target, isReadonly2, baseHandlers, collectionHandlers, proxyMap) {\n if (!shared.isObject(target)) {\n {\n console.warn(`value cannot be made reactive: ${String(target)}`);\n }\n return target;\n }\n if (target[\"__v_raw\"] && !(isReadonly2 && target[\"__v_isReactive\"])) {\n return target;\n }\n const existingProxy = proxyMap.get(target);\n if (existingProxy) {\n return existingProxy;\n }\n const targetType = getTargetType(target);\n if (targetType === 0) {\n return target;\n }\n const proxy = new Proxy(target, targetType === 2 ? collectionHandlers : baseHandlers);\n proxyMap.set(target, proxy);\n return proxy;\n }\n function isReactive2(value) {\n if (isReadonly(value)) {\n return isReactive2(value[\"__v_raw\"]);\n }\n return !!(value && value[\"__v_isReactive\"]);\n }\n function isReadonly(value) {\n return !!(value && value[\"__v_isReadonly\"]);\n }\n function isProxy(value) {\n return isReactive2(value) || isReadonly(value);\n }\n function toRaw2(observed) {\n return observed && toRaw2(observed[\"__v_raw\"]) || observed;\n }\n function markRaw(value) {\n shared.def(value, \"__v_skip\", true);\n return value;\n }\n var convert = (val) => shared.isObject(val) ? reactive3(val) : val;\n function isRef(r) {\n return Boolean(r && r.__v_isRef === true);\n }\n function ref(value) {\n return createRef(value);\n }\n function shallowRef(value) {\n return createRef(value, true);\n }\n var RefImpl = class {\n constructor(_rawValue, _shallow = false) {\n this._rawValue = _rawValue;\n this._shallow = _shallow;\n this.__v_isRef = true;\n this._value = _shallow ? _rawValue : convert(_rawValue);\n }\n get value() {\n track(toRaw2(this), \"get\", \"value\");\n return this._value;\n }\n set value(newVal) {\n if (shared.hasChanged(toRaw2(newVal), this._rawValue)) {\n this._rawValue = newVal;\n this._value = this._shallow ? newVal : convert(newVal);\n trigger(toRaw2(this), \"set\", \"value\", newVal);\n }\n }\n };\n function createRef(rawValue, shallow = false) {\n if (isRef(rawValue)) {\n return rawValue;\n }\n return new RefImpl(rawValue, shallow);\n }\n function triggerRef(ref2) {\n trigger(toRaw2(ref2), \"set\", \"value\", ref2.value);\n }\n function unref(ref2) {\n return isRef(ref2) ? ref2.value : ref2;\n }\n var shallowUnwrapHandlers = {\n get: (target, key, receiver) => unref(Reflect.get(target, key, receiver)),\n set: (target, key, value, receiver) => {\n const oldValue = target[key];\n if (isRef(oldValue) && !isRef(value)) {\n oldValue.value = value;\n return true;\n } else {\n return Reflect.set(target, key, value, receiver);\n }\n }\n };\n function proxyRefs(objectWithRefs) {\n return isReactive2(objectWithRefs) ? objectWithRefs : new Proxy(objectWithRefs, shallowUnwrapHandlers);\n }\n var CustomRefImpl = class {\n constructor(factory) {\n this.__v_isRef = true;\n const {get: get3, set: set3} = factory(() => track(this, \"get\", \"value\"), () => trigger(this, \"set\", \"value\"));\n this._get = get3;\n this._set = set3;\n }\n get value() {\n return this._get();\n }\n set value(newVal) {\n this._set(newVal);\n }\n };\n function customRef(factory) {\n return new CustomRefImpl(factory);\n }\n function toRefs(object) {\n if (!isProxy(object)) {\n console.warn(`toRefs() expects a reactive object but received a plain one.`);\n }\n const ret = shared.isArray(object) ? new Array(object.length) : {};\n for (const key in object) {\n ret[key] = toRef(object, key);\n }\n return ret;\n }\n var ObjectRefImpl = class {\n constructor(_object, _key) {\n this._object = _object;\n this._key = _key;\n this.__v_isRef = true;\n }\n get value() {\n return this._object[this._key];\n }\n set value(newVal) {\n this._object[this._key] = newVal;\n }\n };\n function toRef(object, key) {\n return isRef(object[key]) ? object[key] : new ObjectRefImpl(object, key);\n }\n var ComputedRefImpl = class {\n constructor(getter, _setter, isReadonly2) {\n this._setter = _setter;\n this._dirty = true;\n this.__v_isRef = true;\n this.effect = effect3(getter, {\n lazy: true,\n scheduler: () => {\n if (!this._dirty) {\n this._dirty = true;\n trigger(toRaw2(this), \"set\", \"value\");\n }\n }\n });\n this[\"__v_isReadonly\"] = isReadonly2;\n }\n get value() {\n const self2 = toRaw2(this);\n if (self2._dirty) {\n self2._value = this.effect();\n self2._dirty = false;\n }\n track(self2, \"get\", \"value\");\n return self2._value;\n }\n set value(newValue) {\n this._setter(newValue);\n }\n };\n function computed(getterOrOptions) {\n let getter;\n let setter;\n if (shared.isFunction(getterOrOptions)) {\n getter = getterOrOptions;\n setter = () => {\n console.warn(\"Write operation failed: computed value is readonly\");\n };\n } else {\n getter = getterOrOptions.get;\n setter = getterOrOptions.set;\n }\n return new ComputedRefImpl(getter, setter, shared.isFunction(getterOrOptions) || !getterOrOptions.set);\n }\n exports.ITERATE_KEY = ITERATE_KEY;\n exports.computed = computed;\n exports.customRef = customRef;\n exports.effect = effect3;\n exports.enableTracking = enableTracking;\n exports.isProxy = isProxy;\n exports.isReactive = isReactive2;\n exports.isReadonly = isReadonly;\n exports.isRef = isRef;\n exports.markRaw = markRaw;\n exports.pauseTracking = pauseTracking;\n exports.proxyRefs = proxyRefs;\n exports.reactive = reactive3;\n exports.readonly = readonly;\n exports.ref = ref;\n exports.resetTracking = resetTracking;\n exports.shallowReactive = shallowReactive;\n exports.shallowReadonly = shallowReadonly;\n exports.shallowRef = shallowRef;\n exports.stop = stop2;\n exports.toRaw = toRaw2;\n exports.toRef = toRef;\n exports.toRefs = toRefs;\n exports.track = track;\n exports.trigger = trigger;\n exports.triggerRef = triggerRef;\n exports.unref = unref;\n});\n\n// node_modules/@vue/reactivity/index.js\nvar require_reactivity = __commonJS((exports, module) => {\n \"use strict\";\n if (false) {\n module.exports = null;\n } else {\n module.exports = require_reactivity_cjs();\n }\n});\n\n// packages/alpinejs/src/scheduler.js\nvar flushPending = false;\nvar flushing = false;\nvar queue = [];\nfunction scheduler(callback) {\n queueJob(callback);\n}\nfunction queueJob(job) {\n if (!queue.includes(job))\n queue.push(job);\n queueFlush();\n}\nfunction dequeueJob(job) {\n const index = queue.indexOf(job);\n if (index !== -1) {\n queue.splice(index, 1);\n }\n}\nfunction queueFlush() {\n if (!flushing && !flushPending) {\n flushPending = true;\n queueMicrotask(flushJobs);\n }\n}\nfunction flushJobs() {\n flushPending = false;\n flushing = true;\n for (let i = 0; i < queue.length; i++) {\n queue[i]();\n }\n queue.length = 0;\n flushing = false;\n}\n\n// packages/alpinejs/src/reactivity.js\nvar reactive;\nvar effect;\nvar release;\nvar raw;\nvar shouldSchedule = true;\nfunction disableEffectScheduling(callback) {\n shouldSchedule = false;\n callback();\n shouldSchedule = true;\n}\nfunction setReactivityEngine(engine) {\n reactive = engine.reactive;\n release = engine.release;\n effect = (callback) => engine.effect(callback, {scheduler: (task) => {\n if (shouldSchedule) {\n scheduler(task);\n } else {\n task();\n }\n }});\n raw = engine.raw;\n}\nfunction overrideEffect(override) {\n effect = override;\n}\nfunction elementBoundEffect(el) {\n let cleanup = () => {\n };\n let wrappedEffect = (callback) => {\n let effectReference = effect(callback);\n if (!el._x_effects) {\n el._x_effects = new Set();\n el._x_runEffects = () => {\n el._x_effects.forEach((i) => i());\n };\n }\n el._x_effects.add(effectReference);\n cleanup = () => {\n if (effectReference === void 0)\n return;\n el._x_effects.delete(effectReference);\n release(effectReference);\n };\n };\n return [wrappedEffect, () => {\n cleanup();\n }];\n}\n\n// packages/alpinejs/src/mutation.js\nvar onAttributeAddeds = [];\nvar onElRemoveds = [];\nvar onElAddeds = [];\nfunction onElAdded(callback) {\n onElAddeds.push(callback);\n}\nfunction onElRemoved(callback) {\n onElRemoveds.push(callback);\n}\nfunction onAttributesAdded(callback) {\n onAttributeAddeds.push(callback);\n}\nfunction onAttributeRemoved(el, name, callback) {\n if (!el._x_attributeCleanups)\n el._x_attributeCleanups = {};\n if (!el._x_attributeCleanups[name])\n el._x_attributeCleanups[name] = [];\n el._x_attributeCleanups[name].push(callback);\n}\nfunction cleanupAttributes(el, names) {\n if (!el._x_attributeCleanups)\n return;\n Object.entries(el._x_attributeCleanups).forEach(([name, value]) => {\n if (names === void 0 || names.includes(name)) {\n value.forEach((i) => i());\n delete el._x_attributeCleanups[name];\n }\n });\n}\nvar observer = new MutationObserver(onMutate);\nvar currentlyObserving = false;\nfunction startObservingMutations() {\n observer.observe(document, {subtree: true, childList: true, attributes: true, attributeOldValue: true});\n currentlyObserving = true;\n}\nfunction stopObservingMutations() {\n flushObserver();\n observer.disconnect();\n currentlyObserving = false;\n}\nvar recordQueue = [];\nvar willProcessRecordQueue = false;\nfunction flushObserver() {\n recordQueue = recordQueue.concat(observer.takeRecords());\n if (recordQueue.length && !willProcessRecordQueue) {\n willProcessRecordQueue = true;\n queueMicrotask(() => {\n processRecordQueue();\n willProcessRecordQueue = false;\n });\n }\n}\nfunction processRecordQueue() {\n onMutate(recordQueue);\n recordQueue.length = 0;\n}\nfunction mutateDom(callback) {\n if (!currentlyObserving)\n return callback();\n stopObservingMutations();\n let result = callback();\n startObservingMutations();\n return result;\n}\nvar isCollecting = false;\nvar deferredMutations = [];\nfunction deferMutations() {\n isCollecting = true;\n}\nfunction flushAndStopDeferringMutations() {\n isCollecting = false;\n onMutate(deferredMutations);\n deferredMutations = [];\n}\nfunction onMutate(mutations) {\n if (isCollecting) {\n deferredMutations = deferredMutations.concat(mutations);\n return;\n }\n let addedNodes = [];\n let removedNodes = [];\n let addedAttributes = new Map();\n let removedAttributes = new Map();\n for (let i = 0; i < mutations.length; i++) {\n if (mutations[i].target._x_ignoreMutationObserver)\n continue;\n if (mutations[i].type === \"childList\") {\n mutations[i].addedNodes.forEach((node) => node.nodeType === 1 && addedNodes.push(node));\n mutations[i].removedNodes.forEach((node) => node.nodeType === 1 && removedNodes.push(node));\n }\n if (mutations[i].type === \"attributes\") {\n let el = mutations[i].target;\n let name = mutations[i].attributeName;\n let oldValue = mutations[i].oldValue;\n let add = () => {\n if (!addedAttributes.has(el))\n addedAttributes.set(el, []);\n addedAttributes.get(el).push({name, value: el.getAttribute(name)});\n };\n let remove = () => {\n if (!removedAttributes.has(el))\n removedAttributes.set(el, []);\n removedAttributes.get(el).push(name);\n };\n if (el.hasAttribute(name) && oldValue === null) {\n add();\n } else if (el.hasAttribute(name)) {\n remove();\n add();\n } else {\n remove();\n }\n }\n }\n removedAttributes.forEach((attrs, el) => {\n cleanupAttributes(el, attrs);\n });\n addedAttributes.forEach((attrs, el) => {\n onAttributeAddeds.forEach((i) => i(el, attrs));\n });\n for (let node of removedNodes) {\n if (addedNodes.includes(node))\n continue;\n onElRemoveds.forEach((i) => i(node));\n }\n addedNodes.forEach((node) => {\n node._x_ignoreSelf = true;\n node._x_ignore = true;\n });\n for (let node of addedNodes) {\n if (removedNodes.includes(node))\n continue;\n if (!node.isConnected)\n continue;\n delete node._x_ignoreSelf;\n delete node._x_ignore;\n onElAddeds.forEach((i) => i(node));\n node._x_ignore = true;\n node._x_ignoreSelf = true;\n }\n addedNodes.forEach((node) => {\n delete node._x_ignoreSelf;\n delete node._x_ignore;\n });\n addedNodes = null;\n removedNodes = null;\n addedAttributes = null;\n removedAttributes = null;\n}\n\n// packages/alpinejs/src/scope.js\nfunction scope(node) {\n return mergeProxies(closestDataStack(node));\n}\nfunction addScopeToNode(node, data2, referenceNode) {\n node._x_dataStack = [data2, ...closestDataStack(referenceNode || node)];\n return () => {\n node._x_dataStack = node._x_dataStack.filter((i) => i !== data2);\n };\n}\nfunction refreshScope(element, scope2) {\n let existingScope = element._x_dataStack[0];\n Object.entries(scope2).forEach(([key, value]) => {\n existingScope[key] = value;\n });\n}\nfunction closestDataStack(node) {\n if (node._x_dataStack)\n return node._x_dataStack;\n if (typeof ShadowRoot === \"function\" && node instanceof ShadowRoot) {\n return closestDataStack(node.host);\n }\n if (!node.parentNode) {\n return [];\n }\n return closestDataStack(node.parentNode);\n}\nfunction mergeProxies(objects) {\n let thisProxy = new Proxy({}, {\n ownKeys: () => {\n return Array.from(new Set(objects.flatMap((i) => Object.keys(i))));\n },\n has: (target, name) => {\n return objects.some((obj) => obj.hasOwnProperty(name));\n },\n get: (target, name) => {\n return (objects.find((obj) => {\n if (obj.hasOwnProperty(name)) {\n let descriptor = Object.getOwnPropertyDescriptor(obj, name);\n if (descriptor.get && descriptor.get._x_alreadyBound || descriptor.set && descriptor.set._x_alreadyBound) {\n return true;\n }\n if ((descriptor.get || descriptor.set) && descriptor.enumerable) {\n let getter = descriptor.get;\n let setter = descriptor.set;\n let property = descriptor;\n getter = getter && getter.bind(thisProxy);\n setter = setter && setter.bind(thisProxy);\n if (getter)\n getter._x_alreadyBound = true;\n if (setter)\n setter._x_alreadyBound = true;\n Object.defineProperty(obj, name, {\n ...property,\n get: getter,\n set: setter\n });\n }\n return true;\n }\n return false;\n }) || {})[name];\n },\n set: (target, name, value) => {\n let closestObjectWithKey = objects.find((obj) => obj.hasOwnProperty(name));\n if (closestObjectWithKey) {\n closestObjectWithKey[name] = value;\n } else {\n objects[objects.length - 1][name] = value;\n }\n return true;\n }\n });\n return thisProxy;\n}\n\n// packages/alpinejs/src/interceptor.js\nfunction initInterceptors(data2) {\n let isObject = (val) => typeof val === \"object\" && !Array.isArray(val) && val !== null;\n let recurse = (obj, basePath = \"\") => {\n Object.entries(Object.getOwnPropertyDescriptors(obj)).forEach(([key, {value, enumerable}]) => {\n if (enumerable === false || value === void 0)\n return;\n let path = basePath === \"\" ? key : `${basePath}.${key}`;\n if (typeof value === \"object\" && value !== null && value._x_interceptor) {\n obj[key] = value.initialize(data2, path, key);\n } else {\n if (isObject(value) && value !== obj && !(value instanceof Element)) {\n recurse(value, path);\n }\n }\n });\n };\n return recurse(data2);\n}\nfunction interceptor(callback, mutateObj = () => {\n}) {\n let obj = {\n initialValue: void 0,\n _x_interceptor: true,\n initialize(data2, path, key) {\n return callback(this.initialValue, () => get(data2, path), (value) => set(data2, path, value), path, key);\n }\n };\n mutateObj(obj);\n return (initialValue) => {\n if (typeof initialValue === \"object\" && initialValue !== null && initialValue._x_interceptor) {\n let initialize = obj.initialize.bind(obj);\n obj.initialize = (data2, path, key) => {\n let innerValue = initialValue.initialize(data2, path, key);\n obj.initialValue = innerValue;\n return initialize(data2, path, key);\n };\n } else {\n obj.initialValue = initialValue;\n }\n return obj;\n };\n}\nfunction get(obj, path) {\n return path.split(\".\").reduce((carry, segment) => carry[segment], obj);\n}\nfunction set(obj, path, value) {\n if (typeof path === \"string\")\n path = path.split(\".\");\n if (path.length === 1)\n obj[path[0]] = value;\n else if (path.length === 0)\n throw error;\n else {\n if (obj[path[0]])\n return set(obj[path[0]], path.slice(1), value);\n else {\n obj[path[0]] = {};\n return set(obj[path[0]], path.slice(1), value);\n }\n }\n}\n\n// packages/alpinejs/src/magics.js\nvar magics = {};\nfunction magic(name, callback) {\n magics[name] = callback;\n}\nfunction injectMagics(obj, el) {\n Object.entries(magics).forEach(([name, callback]) => {\n Object.defineProperty(obj, `$${name}`, {\n get() {\n return callback(el, {Alpine: alpine_default, interceptor});\n },\n enumerable: false\n });\n });\n return obj;\n}\n\n// packages/alpinejs/src/utils/error.js\nfunction tryCatch(el, expression, callback, ...args) {\n try {\n return callback(...args);\n } catch (e) {\n handleError(e, el, expression);\n }\n}\nfunction handleError(error2, el, expression = void 0) {\n Object.assign(error2, {el, expression});\n console.warn(`Alpine Expression Error: ${error2.message}\n\n${expression ? 'Expression: \"' + expression + '\"\\n\\n' : \"\"}`, el);\n setTimeout(() => {\n throw error2;\n }, 0);\n}\n\n// packages/alpinejs/src/evaluator.js\nfunction evaluate(el, expression, extras = {}) {\n let result;\n evaluateLater(el, expression)((value) => result = value, extras);\n return result;\n}\nfunction evaluateLater(...args) {\n return theEvaluatorFunction(...args);\n}\nvar theEvaluatorFunction = normalEvaluator;\nfunction setEvaluator(newEvaluator) {\n theEvaluatorFunction = newEvaluator;\n}\nfunction normalEvaluator(el, expression) {\n let overriddenMagics = {};\n injectMagics(overriddenMagics, el);\n let dataStack = [overriddenMagics, ...closestDataStack(el)];\n if (typeof expression === \"function\") {\n return generateEvaluatorFromFunction(dataStack, expression);\n }\n let evaluator = generateEvaluatorFromString(dataStack, expression, el);\n return tryCatch.bind(null, el, expression, evaluator);\n}\nfunction generateEvaluatorFromFunction(dataStack, func) {\n return (receiver = () => {\n }, {scope: scope2 = {}, params = []} = {}) => {\n let result = func.apply(mergeProxies([scope2, ...dataStack]), params);\n runIfTypeOfFunction(receiver, result);\n };\n}\nvar evaluatorMemo = {};\nfunction generateFunctionFromString(expression, el) {\n if (evaluatorMemo[expression]) {\n return evaluatorMemo[expression];\n }\n let AsyncFunction = Object.getPrototypeOf(async function() {\n }).constructor;\n let rightSideSafeExpression = /^[\\n\\s]*if.*\\(.*\\)/.test(expression) || /^(let|const)\\s/.test(expression) ? `(() => { ${expression} })()` : expression;\n const safeAsyncFunction = () => {\n try {\n return new AsyncFunction([\"__self\", \"scope\"], `with (scope) { __self.result = ${rightSideSafeExpression} }; __self.finished = true; return __self.result;`);\n } catch (error2) {\n handleError(error2, el, expression);\n return Promise.resolve();\n }\n };\n let func = safeAsyncFunction();\n evaluatorMemo[expression] = func;\n return func;\n}\nfunction generateEvaluatorFromString(dataStack, expression, el) {\n let func = generateFunctionFromString(expression, el);\n return (receiver = () => {\n }, {scope: scope2 = {}, params = []} = {}) => {\n func.result = void 0;\n func.finished = false;\n let completeScope = mergeProxies([scope2, ...dataStack]);\n if (typeof func === \"function\") {\n let promise = func(func, completeScope).catch((error2) => handleError(error2, el, expression));\n if (func.finished) {\n runIfTypeOfFunction(receiver, func.result, completeScope, params, el);\n func.result = void 0;\n } else {\n promise.then((result) => {\n runIfTypeOfFunction(receiver, result, completeScope, params, el);\n }).catch((error2) => handleError(error2, el, expression)).finally(() => func.result = void 0);\n }\n }\n };\n}\nfunction runIfTypeOfFunction(receiver, value, scope2, params, el) {\n if (typeof value === \"function\") {\n let result = value.apply(scope2, params);\n if (result instanceof Promise) {\n result.then((i) => runIfTypeOfFunction(receiver, i, scope2, params)).catch((error2) => handleError(error2, el, value));\n } else {\n receiver(result);\n }\n } else {\n receiver(value);\n }\n}\n\n// packages/alpinejs/src/directives.js\nvar prefixAsString = \"x-\";\nfunction prefix(subject = \"\") {\n return prefixAsString + subject;\n}\nfunction setPrefix(newPrefix) {\n prefixAsString = newPrefix;\n}\nvar directiveHandlers = {};\nfunction directive(name, callback) {\n directiveHandlers[name] = callback;\n}\nfunction directives(el, attributes, originalAttributeOverride) {\n let transformedAttributeMap = {};\n let directives2 = Array.from(attributes).map(toTransformedAttributes((newName, oldName) => transformedAttributeMap[newName] = oldName)).filter(outNonAlpineAttributes).map(toParsedDirectives(transformedAttributeMap, originalAttributeOverride)).sort(byPriority);\n return directives2.map((directive2) => {\n return getDirectiveHandler(el, directive2);\n });\n}\nfunction attributesOnly(attributes) {\n return Array.from(attributes).map(toTransformedAttributes()).filter((attr) => !outNonAlpineAttributes(attr));\n}\nvar isDeferringHandlers = false;\nvar directiveHandlerStacks = new Map();\nvar currentHandlerStackKey = Symbol();\nfunction deferHandlingDirectives(callback) {\n isDeferringHandlers = true;\n let key = Symbol();\n currentHandlerStackKey = key;\n directiveHandlerStacks.set(key, []);\n let flushHandlers = () => {\n while (directiveHandlerStacks.get(key).length)\n directiveHandlerStacks.get(key).shift()();\n directiveHandlerStacks.delete(key);\n };\n let stopDeferring = () => {\n isDeferringHandlers = false;\n flushHandlers();\n };\n callback(flushHandlers);\n stopDeferring();\n}\nfunction getDirectiveHandler(el, directive2) {\n let noop = () => {\n };\n let handler3 = directiveHandlers[directive2.type] || noop;\n let cleanups = [];\n let cleanup = (callback) => cleanups.push(callback);\n let [effect3, cleanupEffect] = elementBoundEffect(el);\n cleanups.push(cleanupEffect);\n let utilities = {\n Alpine: alpine_default,\n effect: effect3,\n cleanup,\n evaluateLater: evaluateLater.bind(evaluateLater, el),\n evaluate: evaluate.bind(evaluate, el)\n };\n let doCleanup = () => cleanups.forEach((i) => i());\n onAttributeRemoved(el, directive2.original, doCleanup);\n let fullHandler = () => {\n if (el._x_ignore || el._x_ignoreSelf)\n return;\n handler3.inline && handler3.inline(el, directive2, utilities);\n handler3 = handler3.bind(handler3, el, directive2, utilities);\n isDeferringHandlers ? directiveHandlerStacks.get(currentHandlerStackKey).push(handler3) : handler3();\n };\n fullHandler.runCleanups = doCleanup;\n return fullHandler;\n}\nvar startingWith = (subject, replacement) => ({name, value}) => {\n if (name.startsWith(subject))\n name = name.replace(subject, replacement);\n return {name, value};\n};\nvar into = (i) => i;\nfunction toTransformedAttributes(callback = () => {\n}) {\n return ({name, value}) => {\n let {name: newName, value: newValue} = attributeTransformers.reduce((carry, transform) => {\n return transform(carry);\n }, {name, value});\n if (newName !== name)\n callback(newName, name);\n return {name: newName, value: newValue};\n };\n}\nvar attributeTransformers = [];\nfunction mapAttributes(callback) {\n attributeTransformers.push(callback);\n}\nfunction outNonAlpineAttributes({name}) {\n return alpineAttributeRegex().test(name);\n}\nvar alpineAttributeRegex = () => new RegExp(`^${prefixAsString}([^:^.]+)\\\\b`);\nfunction toParsedDirectives(transformedAttributeMap, originalAttributeOverride) {\n return ({name, value}) => {\n let typeMatch = name.match(alpineAttributeRegex());\n let valueMatch = name.match(/:([a-zA-Z0-9\\-:]+)/);\n let modifiers = name.match(/\\.[^.\\]]+(?=[^\\]]*$)/g) || [];\n let original = originalAttributeOverride || transformedAttributeMap[name] || name;\n return {\n type: typeMatch ? typeMatch[1] : null,\n value: valueMatch ? valueMatch[1] : null,\n modifiers: modifiers.map((i) => i.replace(\".\", \"\")),\n expression: value,\n original\n };\n };\n}\nvar DEFAULT = \"DEFAULT\";\nvar directiveOrder = [\n \"ignore\",\n \"ref\",\n \"data\",\n \"id\",\n \"bind\",\n \"init\",\n \"for\",\n \"model\",\n \"modelable\",\n \"transition\",\n \"show\",\n \"if\",\n DEFAULT,\n \"teleport\",\n \"element\"\n];\nfunction byPriority(a, b) {\n let typeA = directiveOrder.indexOf(a.type) === -1 ? DEFAULT : a.type;\n let typeB = directiveOrder.indexOf(b.type) === -1 ? DEFAULT : b.type;\n return directiveOrder.indexOf(typeA) - directiveOrder.indexOf(typeB);\n}\n\n// packages/alpinejs/src/utils/dispatch.js\nfunction dispatch(el, name, detail = {}) {\n el.dispatchEvent(new CustomEvent(name, {\n detail,\n bubbles: true,\n composed: true,\n cancelable: true\n }));\n}\n\n// packages/alpinejs/src/nextTick.js\nvar tickStack = [];\nvar isHolding = false;\nfunction nextTick(callback) {\n tickStack.push(callback);\n queueMicrotask(() => {\n isHolding || setTimeout(() => {\n releaseNextTicks();\n });\n });\n}\nfunction releaseNextTicks() {\n isHolding = false;\n while (tickStack.length)\n tickStack.shift()();\n}\nfunction holdNextTicks() {\n isHolding = true;\n}\n\n// packages/alpinejs/src/utils/walk.js\nfunction walk(el, callback) {\n if (typeof ShadowRoot === \"function\" && el instanceof ShadowRoot) {\n Array.from(el.children).forEach((el2) => walk(el2, callback));\n return;\n }\n let skip = false;\n callback(el, () => skip = true);\n if (skip)\n return;\n let node = el.firstElementChild;\n while (node) {\n walk(node, callback, false);\n node = node.nextElementSibling;\n }\n}\n\n// packages/alpinejs/src/utils/warn.js\nfunction warn(message, ...args) {\n console.warn(`Alpine Warning: ${message}`, ...args);\n}\n\n// packages/alpinejs/src/lifecycle.js\nfunction start() {\n if (!document.body)\n warn(\"Unable to initialize. Trying to load Alpine before `` is available. Did you forget to add `defer` in Alpine's `