{"ScriptPreparationCode":"const deprecatedAndInvalidFullTags = {\r\n kazlat: \u0027kk-Latn\u0027, // thanks yandex\r\n uzbcyr: \u0027uz-Cyrl\u0027, // thanks yandex\r\n zt: \u0027zh-TW\u0027, // thanks libretranslate / argos translate\r\n\r\n \u0027bat-smg\u0027: \u0027sgs\u0027, // thanks wikimedia\r\n \u0027fiu-vro\u0027: \u0027vro\u0027, // thanks wikimedia\r\n \u0027roa-rup\u0027: \u0027rup\u0027, // thanks wikimedia\r\n\r\n // thanks to osm, see https://community.openstreetmap.org/t/non-standard-language-tag-in-osm/85500\r\n \u0027ja-kana\u0027: \u0027ja-Hira\u0027,\r\n \u0027ja-rm\u0027: \u0027ja-Latn\u0027,\r\n \u0027ko-hanja\u0027: \u0027ko-Hani\u0027,\r\n \u0027zh-pinyin\u0027: \u0027zh-Latn\u0027,\r\n \u0027zh-zhuyin\u0027: \u0027zh-Bopo\u0027,\r\n\r\n // thanks to duckduckgo\r\n \u0027tokipona-XX\u0027: \u0027tok\u0027,\r\n \u0027tokipona-xx\u0027: \u0027tok\u0027,\r\n \u0027tw-tzh\u0027: \u0027zh-TW\u0027,\r\n};\r\n\r\nconst deprecatedAndInvalidPrimaryTags = {\r\n in: \u0027id\u0027,\r\n iw: \u0027he\u0027,\r\n jw: \u0027jv\u0027,\r\n};\r\n\r\n// getCanonicalLocales replaces cmn with zh, and tl with fil. We want to keep these as is\r\nconst reversePrimarySubTag = {\r\n cmn: \u0027zh\u0027,\r\n tl: \u0027fil\u0027,\r\n};\r\n\r\nconst items = [\r\n\u0027bh\u0027,\r\n\u0027el\u0027,\r\n\u0027ht\u0027,\r\n\u0027lo\u0027,\r\n\u0027lif\u0027,\r\n\u0027ms\u0027,\r\n\u0027ne\u0027,\r\n\u0027ory\u0027,\r\n\u0027pa\u0027,\r\n\u0027gd\u0027,\r\n\u0027si\u0027,\r\n\u0027sw\u0027,\r\n\u0027af\u0027,\r\n\u0027ar\u0027,\r\n\u0027az\u0027,\r\n\u0027be\u0027,\r\n\u0027bg\u0027,\r\n\u0027bn\u0027,\r\n\u0027ca\u0027,\r\n\u0027ceb\u0027,\r\n\u0027chr\u0027,\r\n\u0027cs\u0027,\r\n\u0027cy\u0027,\r\n\u0027da\u0027,\r\n\u0027de\u0027,\r\n\u0027dv\u0027,\r\n\u0027en\u0027,\r\n\u0027es\u0027,\r\n\u0027et\u0027,\r\n\u0027eu\u0027,\r\n\u0027fa\u0027,\r\n\u0027fi\u0027,\r\n\u0027fr\u0027,\r\n\u0027ga\u0027,\r\n\u0027gl\u0027,\r\n\u0027gu\u0027,\r\n\u0027he\u0027,\r\n\u0027hi\u0027,\r\n\u0027hmn\u0027,\r\n\u0027hr\u0027,\r\n\u0027hu\u0027,\r\n\u0027hy\u0027,\r\n\u0027id\u0027,\r\n\u0027is\u0027,\r\n\u0027it\u0027,\r\n\u0027iu\u0027,\r\n\u0027ja\u0027,\r\n\u0027jv\u0027,\r\n\u0027ka\u0027,\r\n\u0027km\u0027,\r\n\u0027kn\u0027,\r\n\u0027ko\u0027,\r\n\u0027lg\u0027,\r\n\u0027lt\u0027,\r\n\u0027lv\u0027,\r\n\u0027mk\u0027,\r\n\u0027ml\u0027,\r\n\u0027mr\u0027,\r\n\u0027mt\u0027,\r\n\u0027nl\u0027,\r\n\u0027no\u0027,\r\n\u0027pl\u0027,\r\n\u0027pt\u0027,\r\n\u0027ro\u0027,\r\n\u0027ru\u0027,\r\n\u0027rw\u0027,\r\n\u0027sk\u0027,\r\n\u0027sl\u0027,\r\n\u0027sq\u0027,\r\n\u0027sr\u0027,\r\n\u0027sv\u0027,\r\n\u0027syr\u0027,\r\n\u0027ta\u0027,\r\n\u0027te\u0027,\r\n\u0027th\u0027,\r\n\u0027tl\u0027,\r\n\u0027tr\u0027,\r\n\u0027uk\u0027,\r\n\u0027ur\u0027,\r\n\u0027vi\u0027,\r\n\u0027yi\u0027,\r\n\u0027zh\u0027,\r\n\u0027bh-HS\u0027,\r\n\u0027el-HS\u0027,\r\n\u0027ht-HS\u0027,\r\n\u0027lo-HS\u0027,\r\n\u0027lif-HS\u0027,\r\n\u0027ms-HS\u0027,\r\n\u0027ne-HS\u0027,\r\n\u0027ory-HS\u0027,\r\n\u0027pa-HS\u0027,\r\n\u0027gd-HS\u0027,\r\n\u0027si-HS\u0027,\r\n\u0027sw-HS\u0027,\r\n\u0027af-HS\u0027,\r\n\u0027ar-HS\u0027,\r\n\u0027az-HS\u0027,\r\n\u0027be-HS\u0027,\r\n\u0027bg-HS\u0027,\r\n\u0027bn-HS\u0027,\r\n\u0027ca-HS\u0027,\r\n\u0027ceb-HS\u0027,\r\n\u0027chr-HS\u0027,\r\n\u0027cs-HS\u0027,\r\n\u0027cy-HS\u0027,\r\n\u0027da-HS\u0027,\r\n\u0027de-HS\u0027,\r\n\u0027dv-HS\u0027,\r\n\u0027en-HS\u0027,\r\n\u0027es-HS\u0027,\r\n\u0027et-HS\u0027,\r\n\u0027eu-HS\u0027,\r\n\u0027fa-HS\u0027,\r\n\u0027fi-HS\u0027,\r\n\u0027fr-HS\u0027,\r\n\u0027ga-HS\u0027,\r\n\u0027gl-HS\u0027,\r\n\u0027gu-HS\u0027,\r\n\u0027he-HS\u0027,\r\n\u0027hi-HS\u0027,\r\n\u0027hmn-HS\u0027,\r\n\u0027hr-HS\u0027,\r\n\u0027hu-HS\u0027,\r\n\u0027hy-HS\u0027,\r\n\u0027id-HS\u0027,\r\n\u0027is-HS\u0027,\r\n\u0027it-HS\u0027,\r\n\u0027iu-HS\u0027,\r\n\u0027ja-HS\u0027,\r\n\u0027jv-HS\u0027,\r\n\u0027ka-HS\u0027,\r\n\u0027km-HS\u0027,\r\n\u0027kn-HS\u0027,\r\n\u0027ko-HS\u0027,\r\n\u0027lg-HS\u0027,\r\n\u0027lt-HS\u0027,\r\n\u0027lv-HS\u0027,\r\n\u0027mk-HS\u0027,\r\n\u0027ml-HS\u0027,\r\n\u0027mr-HS\u0027,\r\n\u0027mt-HS\u0027,\r\n\u0027nl-HS\u0027,\r\n\u0027no-HS\u0027,\r\n\u0027pl-HS\u0027,\r\n\u0027pt-HS\u0027,\r\n\u0027ro-HS\u0027,\r\n\u0027ru-HS\u0027,\r\n\u0027rw-HS\u0027,\r\n\u0027sk-HS\u0027,\r\n\u0027sl-HS\u0027,\r\n\u0027sq-HS\u0027,\r\n\u0027sr-HS\u0027,\r\n\u0027sv-HS\u0027,\r\n\u0027syr-HS\u0027,\r\n\u0027ta-HS\u0027,\r\n\u0027te-HS\u0027,\r\n\u0027th-HS\u0027,\r\n\u0027tl-HS\u0027,\r\n\u0027tr-HS\u0027,\r\n\u0027uk-HS\u0027,\r\n\u0027ur-HS\u0027,\r\n\u0027vi-HS\u0027,\r\n\u0027yi-HS\u0027,\r\n\u0027zh-HS\u0027,\r\n\u0027bh_HS\u0027,\r\n\u0027el_HS\u0027,\r\n\u0027ht_HS\u0027,\r\n\u0027lo_HS\u0027,\r\n\u0027lif_HS\u0027,\r\n\u0027ms_HS\u0027,\r\n\u0027ne_HS\u0027,\r\n\u0027ory_HS\u0027,\r\n\u0027pa_HS\u0027,\r\n\u0027gd_HS\u0027,\r\n\u0027si_HS\u0027,\r\n\u0027sw_HS\u0027,\r\n\u0027af_HS\u0027,\r\n\u0027ar_HS\u0027,\r\n\u0027az_HS\u0027,\r\n\u0027be_HS\u0027,\r\n\u0027bg_HS\u0027,\r\n\u0027bn_HS\u0027,\r\n\u0027ca_HS\u0027,\r\n\u0027ceb_HS\u0027,\r\n\u0027chr_HS\u0027,\r\n\u0027cs_HS\u0027,\r\n\u0027cy_HS\u0027,\r\n\u0027da_HS\u0027,\r\n\u0027de_HS\u0027,\r\n\u0027dv_HS\u0027,\r\n\u0027en_HS\u0027,\r\n\u0027es_HS\u0027,\r\n\u0027et_HS\u0027,\r\n\u0027eu_HS\u0027,\r\n\u0027fa_HS\u0027,\r\n\u0027fi_HS\u0027,\r\n\u0027fr_HS\u0027,\r\n\u0027ga_HS\u0027,\r\n\u0027gl_HS\u0027,\r\n\u0027gu_HS\u0027,\r\n\u0027he_HS\u0027,\r\n\u0027hi_HS\u0027,\r\n\u0027hmn_HS\u0027,\r\n\u0027hr_HS\u0027,\r\n\u0027hu_HS\u0027,\r\n\u0027hy_HS\u0027,\r\n\u0027id_HS\u0027,\r\n\u0027is_HS\u0027,\r\n\u0027it_HS\u0027,\r\n\u0027iu_HS\u0027,\r\n\u0027ja_HS\u0027,\r\n\u0027jv_HS\u0027,\r\n\u0027ka_HS\u0027,\r\n\u0027km_HS\u0027,\r\n\u0027kn_HS\u0027,\r\n\u0027ko_HS\u0027,\r\n\u0027lg_HS\u0027,\r\n\u0027lt_HS\u0027,\r\n\u0027lv_HS\u0027,\r\n\u0027mk_HS\u0027,\r\n\u0027ml_HS\u0027,\r\n\u0027mr_HS\u0027,\r\n\u0027mt_HS\u0027,\r\n\u0027nl_HS\u0027,\r\n\u0027no_HS\u0027,\r\n\u0027pl_HS\u0027,\r\n\u0027pt_HS\u0027,\r\n\u0027ro_HS\u0027,\r\n\u0027ru_HS\u0027,\r\n\u0027rw_HS\u0027,\r\n\u0027sk_HS\u0027,\r\n\u0027sl_HS\u0027,\r\n\u0027sq_HS\u0027,\r\n\u0027sr_HS\u0027,\r\n\u0027sv_HS\u0027,\r\n\u0027syr_HS\u0027,\r\n\u0027ta_HS\u0027,\r\n\u0027te_HS\u0027,\r\n\u0027th_HS\u0027,\r\n\u0027tl_HS\u0027,\r\n\u0027tr_HS\u0027,\r\n\u0027uk_HS\u0027,\r\n\u0027ur_HS\u0027,\r\n\u0027vi_HS\u0027,\r\n\u0027yi_HS\u0027,\r\n\u0027zh_HS\u0027,\r\n\u0027bh-Hant-HS\u0027,\r\n\u0027el-Hant-HS\u0027,\r\n\u0027ht-Hant-HS\u0027,\r\n\u0027lo-Hant-HS\u0027,\r\n\u0027lif-Hant-HS\u0027,\r\n\u0027ms-Hant-HS\u0027,\r\n\u0027ne-Hant-HS\u0027,\r\n\u0027ory-Hant-HS\u0027,\r\n\u0027pa-Hant-HS\u0027,\r\n\u0027gd-Hant-HS\u0027,\r\n\u0027si-Hant-HS\u0027,\r\n\u0027sw-Hant-HS\u0027,\r\n\u0027af-Hant-HS\u0027,\r\n\u0027ar-Hant-HS\u0027,\r\n\u0027az-Hant-HS\u0027,\r\n\u0027be-Hant-HS\u0027,\r\n\u0027bg-Hant-HS\u0027,\r\n\u0027bn-Hant-HS\u0027,\r\n\u0027ca-Hant-HS\u0027,\r\n\u0027ceb-Hant-HS\u0027,\r\n\u0027chr-Hant-HS\u0027,\r\n\u0027cs-Hant-HS\u0027,\r\n\u0027cy-Hant-HS\u0027,\r\n\u0027da-Hant-HS\u0027,\r\n\u0027de-Hant-HS\u0027,\r\n\u0027dv-Hant-HS\u0027,\r\n\u0027en-Hant-HS\u0027,\r\n\u0027es-Hant-HS\u0027,\r\n\u0027et-Hant-HS\u0027,\r\n\u0027eu-Hant-HS\u0027,\r\n\u0027fa-Hant-HS\u0027,\r\n\u0027fi-Hant-HS\u0027,\r\n\u0027fr-Hant-HS\u0027,\r\n\u0027ga-Hant-HS\u0027,\r\n\u0027gl-Hant-HS\u0027,\r\n\u0027gu-Hant-HS\u0027,\r\n\u0027he-Hant-HS\u0027,\r\n\u0027hi-Hant-HS\u0027,\r\n\u0027hmn-Hant-HS\u0027,\r\n\u0027hr-Hant-HS\u0027,\r\n\u0027hu-Hant-HS\u0027,\r\n\u0027hy-Hant-HS\u0027,\r\n\u0027id-Hant-HS\u0027,\r\n\u0027is-Hant-HS\u0027,\r\n\u0027it-Hant-HS\u0027,\r\n\u0027iu-Hant-HS\u0027,\r\n\u0027ja-Hant-HS\u0027,\r\n\u0027jv-Hant-HS\u0027,\r\n\u0027ka-Hant-HS\u0027,\r\n\u0027km-Hant-HS\u0027,\r\n\u0027kn-Hant-HS\u0027,\r\n\u0027ko-Hant-HS\u0027,\r\n\u0027lg-Hant-HS\u0027,\r\n\u0027lt-Hant-HS\u0027,\r\n\u0027lv-Hant-HS\u0027,\r\n\u0027mk-Hant-HS\u0027,\r\n\u0027ml-Hant-HS\u0027,\r\n\u0027mr-Hant-HS\u0027,\r\n\u0027mt-Hant-HS\u0027,\r\n\u0027nl-Hant-HS\u0027,\r\n\u0027no-Hant-HS\u0027,\r\n\u0027pl-Hant-HS\u0027,\r\n\u0027pt-Hant-HS\u0027,\r\n\u0027ro-Hant-HS\u0027,\r\n\u0027ru-Hant-HS\u0027,\r\n\u0027rw-Hant-HS\u0027,\r\n\u0027sk-Hant-HS\u0027,\r\n\u0027sl-Hant-HS\u0027,\r\n\u0027sq-Hant-HS\u0027,\r\n\u0027sr-Hant-HS\u0027,\r\n\u0027sv-Hant-HS\u0027,\r\n\u0027syr-Hant-HS\u0027,\r\n\u0027ta-Hant-HS\u0027,\r\n\u0027te-Hant-HS\u0027,\r\n\u0027th-Hant-HS\u0027,\r\n\u0027tl-Hant-HS\u0027,\r\n\u0027tr-Hant-HS\u0027,\r\n\u0027uk-Hant-HS\u0027,\r\n\u0027ur-Hant-HS\u0027,\r\n\u0027vi-Hant-HS\u0027,\r\n\u0027yi-Hant-HS\u0027,\r\n\u0027zh-Hant-HS\u0027,\r\n\u0027bh_Hant_HS\u0027,\r\n\u0027el_Hant_HS\u0027,\r\n\u0027ht_Hant_HS\u0027,\r\n\u0027lo_Hant_HS\u0027,\r\n\u0027lif_Hant_HS\u0027,\r\n\u0027ms_Hant_HS\u0027,\r\n\u0027ne_Hant_HS\u0027,\r\n\u0027ory_Hant_HS\u0027,\r\n\u0027pa_Hant_HS\u0027,\r\n\u0027gd_Hant_HS\u0027,\r\n\u0027si_Hant_HS\u0027,\r\n\u0027sw_Hant_HS\u0027,\r\n\u0027af_Hant_HS\u0027,\r\n\u0027ar_Hant_HS\u0027,\r\n\u0027az_Hant_HS\u0027,\r\n\u0027be_Hant_HS\u0027,\r\n\u0027bg_Hant_HS\u0027,\r\n\u0027bn_Hant_HS\u0027,\r\n\u0027ca_Hant_HS\u0027,\r\n\u0027ceb_Hant_HS\u0027,\r\n\u0027chr_Hant_HS\u0027,\r\n\u0027cs_Hant_HS\u0027,\r\n\u0027cy_Hant_HS\u0027,\r\n\u0027da_Hant_HS\u0027,\r\n\u0027de_Hant_HS\u0027,\r\n\u0027dv_Hant_HS\u0027,\r\n\u0027en_Hant_HS\u0027,\r\n\u0027es_Hant_HS\u0027,\r\n\u0027et_Hant_HS\u0027,\r\n\u0027eu_Hant_HS\u0027,\r\n\u0027fa_Hant_HS\u0027,\r\n\u0027fi_Hant_HS\u0027,\r\n\u0027fr_Hant_HS\u0027,\r\n\u0027ga_Hant_HS\u0027,\r\n\u0027gl_Hant_HS\u0027,\r\n\u0027gu_Hant_HS\u0027,\r\n\u0027he_Hant_HS\u0027,\r\n\u0027hi_Hant_HS\u0027,\r\n\u0027hmn_Hant_HS\u0027,\r\n\u0027hr_Hant_HS\u0027,\r\n\u0027hu_Hant_HS\u0027,\r\n\u0027hy_Hant_HS\u0027,\r\n\u0027id_Hant_HS\u0027,\r\n\u0027is_Hant_HS\u0027,\r\n\u0027it_Hant_HS\u0027,\r\n\u0027iu_Hant_HS\u0027,\r\n\u0027ja_Hant_HS\u0027,\r\n\u0027jv_Hant_HS\u0027,\r\n\u0027ka_Hant_HS\u0027,\r\n\u0027km_Hant_HS\u0027,\r\n\u0027kn_Hant_HS\u0027,\r\n\u0027ko_Hant_HS\u0027,\r\n\u0027lg_Hant_HS\u0027,\r\n\u0027lt_Hant_HS\u0027,\r\n\u0027lv_Hant_HS\u0027,\r\n\u0027mk_Hant_HS\u0027,\r\n\u0027ml_Hant_HS\u0027,\r\n\u0027mr_Hant_HS\u0027,\r\n\u0027mt_Hant_HS\u0027,\r\n\u0027nl_Hant_HS\u0027,\r\n\u0027no_Hant_HS\u0027,\r\n\u0027pl_Hant_HS\u0027,\r\n\u0027pt_Hant_HS\u0027,\r\n\u0027ro_Hant_HS\u0027,\r\n\u0027ru_Hant_HS\u0027,\r\n\u0027rw_Hant_HS\u0027,\r\n\u0027sk_Hant_HS\u0027,\r\n\u0027sl_Hant_HS\u0027,\r\n\u0027sq_Hant_HS\u0027,\r\n\u0027sr_Hant_HS\u0027,\r\n\u0027sv_Hant_HS\u0027,\r\n\u0027syr_Hant_HS\u0027,\r\n\u0027ta_Hant_HS\u0027,\r\n\u0027te_Hant_HS\u0027,\r\n\u0027th_Hant_HS\u0027,\r\n\u0027tl_Hant_HS\u0027,\r\n\u0027tr_Hant_HS\u0027,\r\n\u0027uk_Hant_HS\u0027,\r\n\u0027ur_Hant_HS\u0027,\r\n\u0027vi_Hant_HS\u0027,\r\n\u0027yi_Hant_HS\u0027,\r\n\u0027zh_Hant_HS\u0027,\r\n\u0027x-default\u0027,\r\n\u0027i-awesome\u0027,\r\n\u0027x-auto\u0027,\r\n\u0027x-any\u0027,\r\n\u0027x-default\u0027,\r\n\u0027i-awesome\u0027,\r\n\u0027x-auto\u0027,\r\n\u0027x-any\u0027,\r\n\u0027x-default\u0027,\r\n\u0027i-awesome\u0027,\r\n\u0027x-auto\u0027,\r\n\u0027x-any\u0027,\r\n\u0027x-default\u0027,\r\n\u0027i-awesome\u0027,\r\n\u0027x-auto\u0027,\r\n\u0027x-any\u0027,\r\n\u0027weoijfiowe_309jf3oiJIOEJW)(*\u0026^%$)\u0027,\r\n\u0027(*#JF#PFOI#JFO09ewf____fewijf)\u0027,\r\n\u00278\u0027,\r\n\u0027219j5r821\u0027,\r\n\u002712o99jr21j902j190\u0027,\r\n \r\n ]","TestCases":[{"Name":"original","Code":"function getCleanLanguageTag (inputFullTag) {\r\n if (!inputFullTag) return \u0027\u0027; // TODO this should not be needed, yet is a hotfix.\r\n\r\n const replacementFullTag = deprecatedAndInvalidFullTags[inputFullTag];\r\n if (replacementFullTag) return replacementFullTag;\r\n\r\n const subTags = inputFullTag.split(/[_-]/);\r\n const initialPrimarySubTag = subTags.shift();\r\n const cleanPrimarySubTag = initialPrimarySubTag.toLowerCase();\r\n\r\n if (cleanPrimarySubTag === \u0027x\u0027 || cleanPrimarySubTag === \u0027i\u0027) return inputFullTag;\r\n\r\n const extendedSuffix = subTags.length === 0 ? \u0027\u0027 : \u0027-\u0027 \u002B subTags.join(\u0027-\u0027);\r\n\r\n try {\r\n // TODO use inputFullTag.replace(/_/g, \u0027-\u0027) ?\r\n const canonicalLanguageTag = Intl.getCanonicalLocales(cleanPrimarySubTag \u002B extendedSuffix)[0];\r\n\r\n const reversePrimaryWith = reversePrimarySubTag[cleanPrimarySubTag];\r\n if (reversePrimaryWith \u0026\u0026 (reversePrimaryWith === canonicalLanguageTag.split(\u0027-\u0027, 1)[0])) {\r\n return canonicalLanguageTag.replace(reversePrimaryWith, cleanPrimarySubTag);\r\n }\r\n\r\n return canonicalLanguageTag;\r\n } catch {\r\n const replacementPrimarySubTag = deprecatedAndInvalidPrimaryTags[cleanPrimarySubTag];\r\n const finalPrimarySubTag = replacementPrimarySubTag || cleanPrimarySubTag;\r\n return finalPrimarySubTag \u002B extendedSuffix;\r\n }\r\n}\r\n \r\n items.forEach(getCleanLanguageTag)","IsDeferred":false},{"Name":"refactor","Code":"function getCleanLanguageTagNovo (inputFullTag) {\r\n if (!inputFullTag) return \u0027\u0027; // TODO this should not be needed, yet is a hotfix.\r\n\r\n const properFullTag = inputFullTag.replace(/_/g, \u0027-\u0027);\r\n \r\n\r\n const replacementFullTag = deprecatedAndInvalidFullTags[properFullTag];\r\n if (replacementFullTag) return replacementFullTag;\r\n\r\n const rawPrimarySubTag = properFullTag.split(\u0027-\u0027, 1)[0];\r\n const cleanPrimarySubTag = rawPrimarySubTag.toLowerCase();\r\n if (cleanPrimarySubTag === \u0027i\u0027 || cleanPrimarySubTag === \u0027x\u0027) return inputFullTag;\r\n\r\n try {\r\n const canonicalLanguageTag = Intl.getCanonicalLocales(properFullTag)[0];\r\n\r\n const reversePrimaryWith = reversePrimarySubTag[cleanPrimarySubTag];\r\n if (reversePrimaryWith \u0026\u0026 (reversePrimaryWith === canonicalLanguageTag.split(\u0027-\u0027, 1)[0])) {\r\n return canonicalLanguageTag.replace(reversePrimaryWith, cleanPrimarySubTag);\r\n }\r\n\r\n return canonicalLanguageTag;\r\n } catch {\r\n const replacementPrimarySubTag = deprecatedAndInvalidPrimaryTags[cleanPrimarySubTag];\r\n const finalPrimarySubTag = replacementPrimarySubTag || cleanPrimarySubTag;\r\n return properFullTag.replace(rawPrimarySubTag, finalPrimarySubTag);\r\n }\r\n}\r\n \r\n items.forEach(getCleanLanguageTagNovo)","IsDeferred":false},{"Name":"novo regex","Code":"function getCleanLanguageTagNovo (inputFullTag) {\r\n if (!inputFullTag) return \u0027\u0027; // TODO this should not be needed, yet is a hotfix.\r\n\r\n const properFullTag = inputFullTag.replace(/_/g, \u0027-\u0027);\r\n \r\n if (/^(?:x|i)-/i.test(properFullTag)) return inputFullTag;\r\n\r\n const replacementFullTag = deprecatedAndInvalidFullTags[properFullTag];\r\n if (replacementFullTag) return replacementFullTag;\r\n\r\n const rawPrimarySubTag = properFullTag.split(\u0027-\u0027, 1)[0];\r\n const cleanPrimarySubTag = rawPrimarySubTag.toLowerCase();\r\n\r\n try {\r\n const canonicalLanguageTag = Intl.getCanonicalLocales(properFullTag)[0];\r\n\r\n const reversePrimaryWith = reversePrimarySubTag[cleanPrimarySubTag];\r\n if (reversePrimaryWith \u0026\u0026 (reversePrimaryWith === canonicalLanguageTag.split(\u0027-\u0027, 1)[0])) {\r\n return canonicalLanguageTag.replace(reversePrimaryWith, cleanPrimarySubTag);\r\n }\r\n\r\n return canonicalLanguageTag;\r\n } catch {\r\n const replacementPrimarySubTag = deprecatedAndInvalidPrimaryTags[cleanPrimarySubTag];\r\n const finalPrimarySubTag = replacementPrimarySubTag || cleanPrimarySubTag;\r\n return properFullTag.replace(rawPrimarySubTag, finalPrimarySubTag);\r\n }\r\n}\r\n \r\n items.forEach(getCleanLanguageTagNovo)","IsDeferred":false}]}